Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET:如何检查泛型类型类中的类型?_C#_.net_Generics_Types - Fatal编程技术网

C# .NET:如何检查泛型类型类中的类型?

C# .NET:如何检查泛型类型类中的类型?,c#,.net,generics,types,C#,.net,Generics,Types,如何在类中获取泛型类型类的类型 例如: 我构建了一个实现ICollection的泛型类型集合。我有一些方法,比如 public void Add(T item){ ... } public void Add(IEnumerable<T> enumItems){ ... } 当然,这在C#中是行不通的。建议 多谢各位 Michael您可以使用:typeof(T) 就个人而言,我会通过将IEnumerable方法重命名为

如何在类中获取泛型类型类的类型

例如:

我构建了一个实现ICollection的泛型类型集合。我有一些方法,比如

    public void Add(T item){
        ...
    }

    public void Add(IEnumerable<T> enumItems){
        ...
    }
当然,这在C#中是行不通的。建议

多谢各位

Michael

您可以使用:
typeof(T)


就个人而言,我会通过将
IEnumerable
方法重命名为
AddRange
来回避这个问题。这避免了此类问题,并且与现有API(如)保持一致


T
要添加工具
IEnumerable
(我承认很少见)时,它还可以保持整洁。

如果要在泛型类/方法中使用
is
运算符,则必须将
T
限制为引用类型:

public void MyMethod<T>(T theItem) where T : class
{
    if (theItem is IEnumerable) { DoStuff(); }
}
公共void MyMethod(T item),其中T:class
{
如果(item是IEnumerable){DoStuff();}
}

我想他只是关心当一个非泛型IEnumerable作为System.Object传递时,T是System.Object这回答了标题中提出的问题。
if (typeof(T) == typeof(object) ) {
    // Check for IEnumerable
}
public void MyMethod<T>(T theItem) where T : class
{
    if (theItem is IEnumerable) { DoStuff(); }
}