簡體   English   中英

在C#中傳遞通用List <>

[英]Passing a generic List<> in C#

我腦子里死了; 我根據特定的類(c1,c2,c3 ......)定義了幾個List'。 我有一個方法來處理這些列表上的信息。 我想要做的是傳遞特定列表,但讓方法接受通用列表,然后通過typeof確定要執行的具體工作。 我知道它可能,但我似乎無法在方法方面獲得正確的語法。 所以,例如:

List<c1> c1var;
List<c2> c2var;
List<c3> c3var;

some_method(c1var);
some_method(c2var);
some_method(c3var);

class some_thing
some_method(List<> somevar)
if typeof(somevar).name = x then
esle if typeof(somevar).name = y then....

如何設置方法的參數列表?

謝謝R.桑德斯

您還需要聲明some_method是通用的。

void SomeMethod<T>(List<T> someList)
{
    if (typeof(T) == typeof(c1))
    {
         // etc
    }
}

小心使用typeof(typ1)== typeof(typ2)。 這將測試以查看類型是否等同於忽略類型層次結構。

例如:

typeof(MemoryStream) == typeof(Stream); // evaluates to false
new MemoryStream() is Stream; //evalutes to true

檢查對象是否屬於某種類型的更好方法是使用'is'關鍵字。 一個例子如下:

public static void RunSnippet()
{
    List<c1> m1 = new List<c1>();
    List<c2> m2 = new List<c2>();
    List<c3> m3 = new List<c3>();

    MyMeth(m1);
    MyMeth(m2);
    MyMeth(m3);
}

public static void MyMeth<T>(List<T> a)
{
    if (a is List<c1>)
    {
        WL("c1");
    }
    else if (a is List<c2>)
    {
        WL("c2");
    }
    else if (a is List<c3>)
    {
        WL("c3");
    }
}   

在參數部分放入List然后嘗試在代碼switch(typeof(T){case typeof(int): break;})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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