考慮下面的一組類通過:獲取參考參數中一個lambda作爲函數求
public class MyClass
{
public int MyInt { get; set; }
}
public class ObjectProcessor
{
public int ProcessObject(MyClass myClass)
{
return myClass.MyInt ++;
}
}
public class Runner
{
public void Run()
{
var classToPass = new MyClass();
FuncExecutor.ExecuteAction<MyClass>(x => x.ProcessObject(classToPass));
}
}
public static class FuncExecutor
{
public static void ExecuteAction<T>(Expression<Func<ObjectProcessor, int>> expression)
{
// var func = expression.Compile(); ... does having an Expression help?
// How can I get a reference to 'classToPass' at this point?
// The 'classToPass' Type is known to be 'T', in this case 'MyClass'.
}
}
從ExecuteAction
方法中,我怎樣才能到中傳遞到ProcessObject
的classToPass
實例的引用?
編輯:這些評論突出瞭解析表達樹的複雜性,這些表達樹在其構圖上可能差異很大。
然而,在這種特定情況下有兩個事實,減少這種變化顯着:
ProcessObject
將只採取單一的參數。- 參數類型是預先已知的。
修改代碼來表達這一點。
您可以通過表達式樹進行爬網並查找「ConstantExpression」。如何做到這一點取決於樹的結構可能會有多大。 – SLaks
這可能是其中一種完全不同的方法可能比嘗試使用表達式樹強制解決方案更好的情況之一。 – Dirk
@Dirk,你能進一步解釋你的意思嗎? – Holf