我想在不知道类型的情况下使用泛型参数构造一个泛型类。
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'需要1种类型的参数。
答案 0 :(得分:2)
说明类型时需要指定通用参数
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 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));
}
}
答案 1 :(得分:0)
这可能会解决您的问题:
List<GenericClass<T>> genericList = new List<GenericClass<T>>();
genericList.Add(new GenericClass<T>(t1, t2));
答案 2 :(得分:0)
您需要在这里做两件事,
您的类实例应具有通用参数,即<T>
,因此,像
GenericClass
实例
new GenericClass<T>(t1, t2)
为避免编译时错误,请正确定义列表
List<GenericClass<T>> genericList = new List<GenericClass<T>>();