2010-03-15 11 views

Antwort

28

Eigentlich Func ist nur eine einfache Delegat in .NET erklärt Rahmen. Eigentlich gibt es mehrere Func Delegierten dort erklärt:

delegate TResult Func<TResult>() 
delegate TResult Func<T, TResult>(T obj) 
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2) 
delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3) 
delegate TResult Func<T1, T2, T3, T4, TResult>(T1 obj1, T2 obj2, T3 obj3, T4 obj4) 

Das einzige, was Sie tun können, ist Ihre benutzerdefinierten Delegaten deklarieren:

delegate bool MyFunc<T1, T2>(T1 a, out T2 b) 
6

Sie müssen Ihre eigenen Delegattyp machen, wie folgt aus:

delegate bool MyFunc(Type1 a, out Type2 b); 
+0

dies ist der einzige Weg? – Benny

+0

Ja. Die generischen 'Func' Delegierten sind reguläre generische Typen, die reguläre Typparameter verwenden. 'out b' ist kein Typ. – SLaks

5

Vielleicht möchten Sie Ihr Design zu überdenken. Müssen Sie Ihren Code wirklich komplizieren, indem Sie einen out-Parameter hinzufügen?

Sie können die bool Rückgabetyp wickeln und die zweite aus Art in ihrer eigenen Klasse (oder .NET 4.0 Tuple) und verwenden, die als Rückgabetyp:

public Func<Type1, Tuple<Type2, bool>> DetectMethod; 

Natürlich, wenn Sie die verwenden möchten Delegaten, die auf try-Parse-Methoden verweisen, Sie befinden sich auf dem richtigen Weg, und Sie müssen einen neuen Delegaten definieren, wie andere bereits beschrieben haben.

+0

Dies ist auch LINQ-freundlicher als benutzerdefinierte Delegaten mit Ref- oder Out-Parametern. – Libor