Parametri nominati / opzionali in C # 3.0?
Domanda
C'è un modo per aggiungere parametri opzionali a C # 3.0 come ci sarà in C # 4.0? Devo avere questa funzione, non vedo l'ora!
Modifica
Se conosci una soluzione alternativa / hack per farlo, pubblica anche questo. Grazie!
Soluzione
È possibile utilizzare un tipo anonimo e una riflessione come soluzione alternativa ai parametri denominati:
public void Foo<T>(T parameters)
{
var dict = typeof(T).GetProperties()
.ToDictionary(p => p.Name,
p => p.GetValue(parameters, null));
if (dict.ContainsKey("Message"))
{
Console.WriteLine(dict["Message"]);
}
}
Quindi ora posso chiamare Foo in questo modo:
Foo(new { Message = "Hello World" });
... e scriverà il mio messaggio.
Fondamentalmente sto estraendo tutte le proprietà dal tipo anonimo che è stato passato e le sto convertendo in un dizionario di stringa e oggetto (il nome della proprietà e il suo valore).
Altri suggerimenti
C'è sempre un sovraccarico del metodo. :)
Purtroppo no. Sarà necessario il compilatore C # 4.0 per supportare questo. Se desideri parametri opzionali sulla piattaforma .NET oggi, puoi provare VB .NET o F #.
Come ha detto Dustin, i parametri opzionali stanno arrivando in C # 4.0. Un tipo di modo scadente per simulare parametri opzionali sarebbe quello di avere un oggetto [] (o più array fortemente tipizzato) come ultimo argomento.
Uno potrebbe anche usare argomenti variabili come parametri di opzione. Un esempio di come funziona è string.Format ().
Vedi qui:
http://blogs.msdn.com/csharpfaq /archive/2004/05/13/131493.aspx