我在基類中有一個類層次結構和一個靜態方法,所以子類也有這種靜態方法。我喜歡這樣定義將靜態方法的約束返回類型改爲當前類的類型
public static IEnumerable<T> GetList<T>()
where T : BaseClass, new()
{
return new List<T>() { ... };
}
一個靜態方法,所以我將能夠調用
var list = ChildClass.GetList();
和列表將IEnumerable<ChildClass>
。但我不知道如何告訴編譯器推斷泛型類型是類我從呼叫類型,所以這種用法產生一個錯誤,我必須把它糾正以某種方式冗餘
var list = ChildClass.GetList<ChildClass>();
我可以使用擴展方法(他們有this
參數,允許編譯器趕上),但我想這樣做沒有實例化ChildClass
。
有沒有辦法做到這一點,而不重複?
直到有人創建了一個'EvilChild:BaseClass' –
Servy
@Servy是的,這就是爲什麼醜陋的黑客被稱爲醜陋和黑客。 – sloth
有趣,謝謝。 :-) –