2015-08-18 12 views
13

Ich habe keinen Zweifel, dies ist so einfach wie möglich zu tun, aber ich habe eine Funktion Schöpfer Bibliothek, die Lambda-Funktionen für mich die Form erzeugt:C# Konvertieren Func <T1, object> zu Func <T1, T2>

Func<T1, object> 

Und ich m sucht, um die out-Parameter genauer zu spezifizieren - Grundsätzlich suche ich nach der Lage sein, etwas entlang der Linien von zu erstellen:

private Func<T1, T2> GetFunc<T1, T2>(string expression) 
{ 
    Func<T1, object> objFunc = CreateFunction(expression)); 
    return objFunc as Func<T1, T2>; 
} 

Aber, wenn ich das versuche, erhalte ich ein null zurück (als beiseite , wenn ich objFunc als 0 zurückgebees ist kein Null, so weiß ich, dass das nicht mein Problem ist).

Wie mache ich das richtig?

+0

Randbemerkung: Wenn Sie werfen wollen, dann werfen (d '(Func ) objFunc'). Verwenden Sie 'as' nicht, es sei denn, Sie haben einen guten Grund dafür. Auf diese Weise wird Ihre Anweisung schnell mit einer 'InvalidCastException' fehlschlagen und Sie müssen' NullReferenceException' nicht verfolgen und prüfen, ob der Wert vorher Null war, um zu wissen, ob die Umwandlung fehlgeschlagen ist oder nicht. – Heinzi

+0

Wenn Sie dies richtig tun, müssen Sie nicht die Bibliothek zur Erstellung von Funktionen verwenden, die solche unzuverlässigen Dinge ausführt. Das Problem liegt in dieser Bibliothek. – Martijn

Antwort

16

Versuchen:

private Func<T1, T2> GetFunc<T1, T2>(string expression) 
{ 
    Func<T1, object> objFunc = CreateFunction(expression)); 
    return arg=>(T2)objFunc(arg); 
} 
+1

DARN IT !!! - Ich war so nah!!!! - Ich habe 2 Eingaben für die Return-Anweisung versucht, das macht Sinn !! - DANKE!!!!! –

+1

@JohnBustos Sie sind herzlich willkommen! –

10

Würden Sie einfach Ihren vorhandenen Funktionsaufruf in einen anderen umbrechen, der den zurückgegebenen Wert umsetzt?

return t1 => (T2)objFunc(t1); 
+0

Danke !!! - Das ist genau das, was ich brauchte !!!! - Tyree hat dich einfach geschlagen, aber ich kann dir nicht genug für die Antwort danken !!!! –

Verwandte Themen