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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top