2016-06-27 16 views
1

Ich brauche eine Swallow (Func) -Methode von NLog Bibliothek. Wichtiger Hinweis: Ich rufe Swallow von einer statischen Methode und möchte eine statische Methode übergeben.Wie Übergeben eines Verweises auf eine statische Methode als Funktionsparameter in C#?

Die Dokumentation ist hier:

http://nlog-project.org/documentation/v3.2.1/html/Overload_NLog_Logger_Swallow.htm

Der erste Fall (Swallow(Action)) (vorbei an statischen Methoden WO-Parameter) funktioniert ganz einfach:

static void ParameterlessMethodThatCasts() 
{ 
    throw NotImplementedException("Not implemented yet"); 
} 

... 
// Code in some method that uses static instance of nLog 
nLog.Instance.Swallow(ParameterlessMethodThatCasts); 

Leider gibt kein Beispiel für die vorgesehen ist 2. (Swallow<T>(Func<T>)) und 3. (Swallow<T>(Func<T>, T)) Überlast, bei der in beiden Fällen Methodenreferenzen mit Parametern übergeben werden.

Ich fand auch an anderer Stelle kein entsprechendes Beispiel.

Ich habe mich versucht:

`Object.TypeOf()` 

und var t = typeof(MyMethod);

Keiner von ihnen sind syntaktisch korrekt.

Welche Syntax sollte ich stattdessen verwenden, um eine Referenz an eine Methode mit den Parametern zu übergeben (d. H. Die zweite und dritte Überladung in der obigen Verknüpfung)?

Gibt es einen anderen Weg, als einen Delegaten zu übergeben?

+0

sein Darf ich einen Delegaten müssen und übergeben Sie das, wie in diesem Thread vorgeschlagen: http://StackOverflow.com/Questions/2082615/Pass-method-as-Parameter-using-c-sharp?rq=1 –

Antwort

1

Sie einen Pass könnte in Func<T> oder Func<T, T> wenn man so will, aber vielleicht ist es besser geeignet für Sie in einem anonymen Lambda-Ausdruck weitergeben müssen:

() => this.ParameterlessMethodThatCasts("A", "B", 1, 2) 

Da diese Unterschrift die erste Überlast abgestimmt, können Sie passieren in beliebigen Parametern, die Sie möchten.

Die Func<T> und Func<T, T> würde so ein Verfahren entsprechen (wo T ist string in diesem Fall):

private string SomeMethod(); // Func<T> 

Und:

private string SomeMethod(string arg1); // Func<T, T> 
+0

Patrick: Danke für Tipp. Ich habe vergessen anzugeben, dass es eine statische Methodenumgebung ist, wo ich es mache. Ich habe es in der Frage behoben. –

+0

Also, wie ändert das meine Antwort? –

+0

Patrick Sie haben Recht! Ich entfernte die Typspezifikation Swallow und es kompiliert jetzt. Scheint genau das, was ich will :) Lass mich nachsehen. –

Verwandte Themen