[英]Construct Generic class without knowing type
我想在不知道類型的情況下構造一個具有通用參數的通用 class。
List<T> genericList = new List<T>();
public void AddGenericValue<T>(T t1, T t2)
{
for (int i = 0; i < genericList.Count; i++)
{
if (genericList[i].t1 == t1)
{
genericList[i].t2 = t2;
return;
}
}
genericList.Add(new GenericClass(t1, t2));
}
public class GenericClass<T>
{
T t1;
T t2;
public GenericClass(T t1, T t2)
{
this.t1 = t1;
this.t2 = t2;
}
}
現在我得到錯誤使用泛型類型'GenericClass'需要一種類型的參數。
聲明類型時需要指定泛型參數:
new GenericClass<T>(t1, t2)
原因是不能為類推斷類型參數,只能為方法推斷。 您可以通過編寫工廠來使用它:
static class GenericClassFactory
{
public static GenericClass<T> Create(T t1, T t2)
{
return new GenericClass<T>(t1, t2);
}
}
現在你可以:
var foo = GenericClassFactory.Create(1, 2);
T
將由編譯器推導出來。
此外,列表應該是正確的類型:
var genericList = new List<GenericClass<T>>();
如果您需要將列表存儲為成員變量,那么您需要將泛型類型提升到 class 級別而不是方法級別:
class Foo<T>
{
private readonly List<GenericClass<T>> genericList = new List<GenericClass<T>>();
public void AddGenericValue(T t1, T t2)
{
for (int i = 0; i < genericList.Count; i++)
{
if (genericList[i].t1 == t1)
{
genericList[i].t2 = t2;
return;
}
}
genericList.Add(new GenericClass<T>(t1, t2));
}
}
這可能會解決您的問題:
List<GenericClass<T>> genericList = new List<GenericClass<T>>();
genericList.Add(new GenericClass<T>(t1, t2));
你在這里需要兩件事,
您的 class 實例應該期望通用參數,即<T>
,因此創建GenericClass
的實例
new GenericClass<T>(t1, t2)
為避免編譯時錯誤,請正確定義您的列表
List<GenericClass<T>> genericList = new List<GenericClass<T>>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.