使用一些已知类型参数调用泛型方法

时间:2016-01-06 18:48:33

标签: c# list generics methods

我正在尝试调用泛型,但不知道这应该如何工作。我环顾互联网,无法找到符合我案例的解决方案。

我有以下方法:

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)

但这不起作用!

3 个答案:

答案 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{}

是可能的。