簡體   English   中英

用一些已知的類型參數調用泛型方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM