簡體   English   中英

如何修復'T'是'類型參數',但用作'變量'編譯錯誤

[英]how to fix 'T' is a 'type parameter' but is used like a 'variable' compile error

我需要檢查泛型類型參數TMyEntity還是它的子類。

下面的代碼導致此編譯器錯誤:

'T' is a 'type parameter' but is used like a 'variable'

怎么修?

public class MyEntity { }

static void Test<T>()
{
    // Error    34  'T' is a 'type parameter' but is used like a 'variable'
    if (T is MyEntity)
    {
    }
}

您可以在Type上使用IsAssignableFrom方法來檢查是否可以將一個Type分配給另一個Type

if (typeof(MyEntity).IsAssignableFrom(typeof(T)))

注意:如果您希望T 只能MyEntity或它的子類,您可以定義泛型約束,如下所示:

static void Test<T>() where T : MyEntity
{

}

而像Test<object>()這樣的代碼甚至都不會編譯


您可以使用以下代碼檢查IsAssignableFrom

public static void F<T>()
{
    var isAssignable = typeof(IEnumerable).IsAssignableFrom(typeof(T));

    Console.WriteLine ("{0} is {1} IEnumerable", typeof(T).Name, isAssignable ? "" : "not");
}

例子:

F<IList>();       //prints IList is IEnumerable
F<IEnumerable>(); //prints IEnumerable is IEnumerable
F<object>();      //prints object is not IEnumerable

暫無
暫無

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

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