我有CollectionBase
這樣子類:蒙上了CollectionBase的子類的泛型列表沒有指定類型明確
public abstract class BaseList : CollectionBase
{
public abstract Type ListType { get; }
}
public class MyClassList : BaseList
{
public override Type ListType
{
get { return typeof(MyClass); }
}
}
所以我知道的類型在編譯時。我想添加一個方法ToGenericList()
到 我的BaseList
類,它會將任何BaseList
轉換爲類型 ListType
的通用List
。
這不起作用:「類型參數不能從使用推斷」
public List<T> ToGeneric<T>()
{
return List.Cast<T>().ToList();
}
因爲很顯然,我可以 只是這樣做:
someList.Cast<MyClass>().ToList();
或本:
someList.ToGeneric<MyClass>();
但這變得非常繁瑣當我與有列表和我的名單 列表對象工作想要在它們上面使用一堆LINQ方法,並且類名長度超過30個字符。
是否有任何解決方案不涉及調用者指定類型或調用 ?
有沒有你不把一個通用的'BaseList'首先具體原因是什麼? –
@LucasTrzesniewski是的。我沒有設計這個系統,那個不再爲這個公司工作的人,同事們在編寫新的代碼以保持一致性時,模仿以前的設計。這個舊的,複雜的系統現在有數千行使用這些自定義非通用列表。然而,我的同事和我仍然經常用'.Cast <>()來使用泛型。但是,正如我所說,這很麻煩。 – nanny
你可以在每個子類中定義一個單獨的'ToList()',指定正確的類型有:'公開名單 ToGeneric()',例如..我不認爲有辦法讓一個BaseClass的方法,這項工作。 –
Blorgbeard