假設我有一個基類像下面使用表達式樹訪問具有相同名稱的方法在2個不相關的類
public abstract class BaseHelloWorld<T> where T : BaseEntity
{
public abstract IEnumerable<T> DoSomething();
}
和另一等
public class BaseEntity
{
public abstract void DoSomethingInPayload();
}
然後,我有4類,如:
public class Payload1 : BaseEntity
{
public override void DoSomethingInPayload()
{
Console.Write("Hello world");
}
}
public class Class1 : BaseHelloWorld<Payload1>
{
public override IEnumerable<Payload1> DoSomething()
{
return new List<Payload1> { };
}
}
public class Payload2 : BaseEntity
{
public override void DoSomethingInPayload()
{
Console.Write("Goodbye world");
}
}
public class Class2 : BaseHelloWorld<Payload2>
{
public override IEnumerable<Payload2> DoSomething()
{
return new List<Payload2>() { };
}
}
雖然我在這裏顯示的代碼,假設這些地方我沒有co的第三方庫德,我想擴展它們。我想要做的是能夠創建一個單一的擴展方法,這將允許我這樣稱呼上相似的有效載荷類DoSomethingInPayload()方法來
public static void CallDoSomething<T>(this BaseHelloWorld<T> theClass) where T: BaseEntity
{
theClass.DoSomethingInPayload();
}
顯然,這將無法工作,所以我開始尋找表達樹木。我的閱讀表明這可能與表達樹有關,但我無法弄清楚。經過幾個小時的嘗試,我無法確定我的理論是否正確。因此,請你告訴我:
A)是否可以用表達式樹做到這一點 B)如果是的話我該怎麼做?
在此先感謝
怎麼樣'的IEnumerable CallDoSomething (這BaseHelloWorld theClass描述) '? –
這是可能的,但爲什麼表達樹(或反射) - 「動態」就是爲此而設計的,例如'return((dynamic)theClass).DoSomething();' –
,因爲你不能使用動態作爲擴展方法的第一個參數 – John