2012-12-17 5 views
7

Ich fragte mich, wie die genaue Syntax für ref und out Parameter für Delegaten und Inline-Lambda-Funktionen ist.Func/Action Delegaten mit Referenzargumente/Parameter oder anonyme Funktionen

hier ist ein Beispiel

, wenn eine Funktion von

public void f() 
{ 
    Action<int> f2 = DoSomething; 
    f2(3); 
} 

als

public void DoSomething(int withValue) { } 

ein Delegierter in einer Funktion erstellt werden, wie ist das Syntax, wenn die ursprüngliche Funktion definiert ist, kann würde definiert werden als

public void DoSomething(ref int withValue) { withValue = 3; } 

Antwort

12

Sie benötigen einen neuen Delegattyp für diese Methode Signatur zu definieren:

delegate void RefAction<in T>(ref T obj); 

public void F() 
{ 
    RefAction<int> f2 = DoSomething; 
    int x = 0; 
    f2(ref x); 
} 

Der Grund, warum das .NET Framework nicht diese Art gehören wahrscheinlich ist, weil ref Parameter nicht sehr verbreitet sind, und die Anzahl der benötigten Typen explodiert, wenn Sie für jede mögliche Kombination einen Delegattyp hinzufügen.

4

Sie können nicht verwenden Action, Func<T> oder der Einbau-Delegierten, sondern müssen Ihre eigenen in diesem Fall definieren:

delegate void ActionByRef<T>(ref T value); 

Dann gegeben diesem können Sie haben:

int value = 3; 
ActionByRef<int> f2 = DoSomething; 
f2(ref value);