很難想出一個好的標題,但是讓我們說我有這種情況。我有一個基類:使用從基類到通用方法列表的項目
public abstract class FooBase
{
}
而且我有一個通用的實現:
public class MyFoo<T> : FooBase where T : Bar
{
}
到目前爲止好。抽象的基礎是我可以創建這些通用項目的異構集合:
List<FooBase> list = new List<FooBase>()
{
new MyFoo<Bar1>(),
new MyFoo<Bar2>()
}
現在問題來了。我有一個通用的方法:
public void DoSomething<T>(MyFoo<T> aFoo) where T : Bar
{
}
而且這個作品時,我把它叫做一個特定Foo
的一個實例:
DoSomething(new MyFoo<Bar1>());
但我想這將需要一個列表,並調用DoSomething
功能在每個項目上:
public void DoSomethingWithList(List<FooBase> list)
{
foreach (var item in list)
{
DoSomething(item); // doesn't work - type cannot be inferred here
}
}
那麼,有沒有辦法,在運行時讓它找出正確的類型並調用泛型函數?或者有沒有其他解決這個難題的方法?
瞭望手動插入式,因爲這不是類型安全的 – Dzior
@Dzior:它是類型安全的,只是在執行時而不是編譯時。 –
對不起,我的意思是強烈鍵入:) – Dzior