我需要找出我正在使用的Type
是否为通用'容器',例如,如果我有List<int>
,我需要检查我是否正在使用列表(我知道如何获得我是否正在使用int
),我将如何做到这一点?(我想是反射)。另一个例子,我有一个名为StructContainer<T>
的类,我需要找到单词(name)'StructContainer',我不太担心'T'是什么,使用反射我得到StructContainer'1
,讨厌不得不做一些字符串分割等/编辑:只是为了进一步解释,StructContainer<int>
我需要'StructContainer', Tuple<int>
我需要'Tuple', List<int>
我需要'List'等等
您的第一个问题可以通过多种方式实现:
- 检查对象是否实现了
IEnumerable<T>
:yourObject is IEnumerable<int>
。只有当你知道容器中对象的类型(本例中为int
) - 使用与我下面描述的相同的解决方案,只需将
StructContainer
更改为List
。
关于你的第二个问题,你可以这样做:
var yourObject = new StructContainer<int>();
var yourType = yourObject.GetType();
if(yourType.IsGenericType &&
yourType.GetGenericTypeDefinition() == typeof(StructContainer<>))
// ...
string type = yourObject.GetType().Name.Split('`')[0];