如何处理集合中的不同泛型类(共享基类型)?

时间:2014-02-06 22:47:08

标签: c# generics

我有

public class BaseClass {
public string Name;
}

public class A<T> : BaseClass {
public T Value;
public Action<T> ToDo;
}

public List<BaseClass> MyList;

我用

填充MyList
A<int>, A<double>, A<SomeUnknownType>.

在处理MyList的元素时,我想调用ToDo(Value)而不必知道每种情况下特定的T是什么。

2 个答案:

答案 0 :(得分:2)

闻起来很糟糕,但你可以试试这个:

foreach (var item in MyList)
{
    if (item.GetType().IsGenericType)
    {
        Type genericType = item.GetType().GetGenericArguments()[0];
        ...
    }
}

您可以将通用类型放入 genericType 变量中。

为了确定类型是否为 A ,您可以这样做:

bool isA = item.GetType().GetGenericTypeDefinition().Equals(typeof(A<>));

答案 1 :(得分:-1)

您可以简单地使用当前枚举结果(a.k.a“item”)之间的typeof比较,例如if(item.GetType().Equals(typeof(A<>))