Frage

Gibt es eine Möglichkeit optionale Parameter C # 3.0 hinzuzufügen, wie es in C # 4.0 sein? Ich muss diese Funktion haben, ich kann einfach nicht warten!

Bearbeiten:

Wenn Sie eine Behelfslösung wissen / Hack dies zu erreichen, per Post auch. Dank!

War es hilfreich?

Lösung

Sie können einen anonymen Typ und Reflexion als Behelfslösung für benannte Parameter verwenden:

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"]);
    }
}

So, jetzt kann ich Foo wie folgt aufrufen:

Foo(new { Message = "Hello World" });

... und es wird meine Nachricht schreiben.

Im Grunde genommen bin ich zu extrahieren alle Eigenschaften von den anonymen Typ, der übergeben wurde, und sie in einem Wörterbuch von String und Objekt konvertieren (die Namen der Eigenschaft und seinen Wert).

Andere Tipps

Es gibt immer Methode Überlastung. :)

Leider nicht. Sie werden die C # 4.0-Compiler benötigen, dies zu unterstützen. Wenn Sie heute optionale Parameter auf der .NET-Plattform möchten, können Sie versuchen, VB .NET oder F #.

Wie Dustin sagte, optionale Parameter kommen in C # 4.0. Eine Art von crappy Weise optionale Parameter zu simulieren wäre ein Objekt zu haben [] (oder mehrere stark typisierte Array) als letztes Argument.

Man könnte auch variable Argumente als Option Parameter verwenden. Ein Beispiel für die Art und Weise dies funktioniert, ist string.Format ().

Sehen Sie hier:

http://blogs.msdn.com/csharpfaq /archive/2004/05/13/131493.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top