我正在尝试调用泛型,但不知道这应该如何工作。我环顾互联网,无法找到符合我案例的解决方案。
我有以下方法:
public void method<T>(string name, string sheet, List<List<T>> xList, List<List<T>> yList)
现在我想简单地调用这个方法。当我这样做时,我收到一个错误,它告诉我必须指定类型参数。当我指定它们时,它告诉我需要“一个类型的参数”。我在这做错了什么?我读到这应该通过反射或其他东西来完成,但不能让它起作用。
我尝试用以下方法调用方法:
method<string, string, List<List<DateTime>>, List<List<Double>>>(name, sheet, xList, yList)
但这不起作用!
答案 0 :(得分:6)
你需要
public void method<T1, T2>(string name, string sheet, List<List<T1>> xList, List<List<T2>> yList)
而不是
public void method<T>(string name, string sheet, List<List<T>> xList, List<List<T>> yList)
答案 1 :(得分:0)
你只有1个通用参数。如果T是一个字符串,那么你将调用你的方法,如
method<string>(name,sheet,xList,yList);
如果T是DateTime,那么你会调用
method<DateTime>(name,sheet,xList,yList);
或者如果您需要2个通用参数,那么您可以
method<T,U>(string name,string sheet,List<List<T>> xList, List<List<U>> xList);
并调用
method<DateTime,Double>(name,sheet,xList,yList);
答案 2 :(得分:0)
xlist和ylist上的泛型类型必须相同。例如,这有效。
void Main() {
var foo = new List<List<Foo>>();
var foo2 = new List<List<Foo>>();
method("sdf", "sdf", foo, foo2);
}
class Foo{}
但是为了传递两个不同类型的列表,您必须将方法签名更改为public void method<T,U>(string name, string sheet, List<List<T>> xList, List<List<U>> yList)
。然后是这样的......
void Main() {
var foo = new List<List<Foo>>();
var bar = new List<List<Bar>>();
method("sdf", "sdf", foo, bar);
}
class Foo{}
class Bar{}
是可能的。