获取泛型容器类型



我需要找出我正在使用的Type是否为通用'容器',例如,如果我有List<int>,我需要检查我是否正在使用列表(我知道如何获得我是否正在使用int),我将如何做到这一点?(我想是反射)。另一个例子,我有一个名为StructContainer<T>的类,我需要找到单词(name)'StructContainer',我不太担心'T'是什么,使用反射我得到StructContainer'1,讨厌不得不做一些字符串分割等/编辑:只是为了进一步解释,StructContainer<int>我需要'StructContainer', Tuple<int>我需要'Tuple', List<int>我需要'List'等等

您的第一个问题可以通过多种方式实现:

  1. 检查对象是否实现了IEnumerable<T>: yourObject is IEnumerable<int>。只有当你知道容器中对象的类型(本例中为int)
  2. 使用与我下面描述的相同的解决方案,只需将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];

相关内容

  • 没有找到相关文章

最新更新