2011-01-19 10 views
5

Can CodeDom può creare argomenti facoltativi durante la generazione di un metodo C# e fornire un valore predefinito?CodeDom può creare argomenti facoltativi durante la generazione di un metodo C#?

Ad esempio:

public void ExampleMethod(int required 
          , string optionalstr = "default string" 
          , int optionalint = 10) 

Soluzione ho trovato una soluzione semplice per questo, si può semplicemente mettere il valore di default come parte del nome argomento:

CodeParameterDeclarationExpression(typeof(int), "optionalint = 5"); 

Questo funziona per me b/c sto usando solo il CodeDom per produrre codice C#. Non funzionerà se devi supportare più lingue.

+1

Nota che solo perché si può fare questo non significa che sia una buona idea :) –

+0

Sono sorpreso che questo non dia un errore. – SLaks

risposta

4

Sì.

Aggiungere l'attributo [Optional].
Per specificare il valore predefinito, aggiungere l'attributo [[DefaultParameterValue(...)]. (Se il valore di default è 0 o null, questo attributo può essere omesso.

Ho scritto un more detailed explanation sul mio blog.

+0

Posso fornire un valore predefinito? (Ho appena aggiornato la domanda per maggiori dettagli a riguardo) Vorrei dare un valore stringa (ad esempio) un valore predefinito invece di passare null. – NotDan

+0

@Non: Sì. Aggiungi l'attributo '[DefaultParameterValue]'. – SLaks

+0

Sì, quei lavori, grazie. Tuttavia a Resharper non piace = (vorrei che esistesse un modo per renderlo disponibile nel formato, int optional = 5). – NotDan

Problemi correlati