[英]Calling a Generic Method using Lambda Expressions (and a Type only known at runtime)
[英]Calling a generic method with some known type arguments
我正在嘗試調用泛型,但不知道這應該如何工作。 我環顧互聯網,找不到適合我情況的解決方案。
我有以下方法:
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)
但這不起作用!
你需要
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個通用參數。 如果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);
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{}
可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.