您的位置:首页 > 编程语言 > C#

Type中的3个bool属性: IsGenericType , IsGenericTypeDefinition , IsGenericParameter 标签: 泛型TypeC# 2015-05-20

2017-08-26 17:47 369 查看
首先说下 IsGenericType 

用3个实例说明:
typeof(DateTime).IsGenericType : false
typeof(List<int>).IsGenericType: true
typeof(Dictionary<,>).IsGenericType:true
1
2
3
1
2
3
类型如果是泛型则为 true 
但是要注意以下情况: 

T[], List[] 等等数组时, IsGenericType为False 

typeof(T[]).GetElementType().IsGenericType才是True
接着说 IsGenericTypeDefinition 

用2个实例说明:
typeof(List<int>).IsGenericTypeDefintion : false
typeof(List<>).IsGenericTypeDefinition :true
1
2
1
2
IsGenericTypeDefinition : 获取一个值,该值指示当前 Type 是否表示可以用来构造其他泛型类型的泛型类型定义。 

也就是说表明 这个 type 是否可以用于构建泛型定义 

比如 List<> 可以通过反射构建出 List,List 

例子:
var typeList = typeof(List<>);
Type typeDataList = typeList.MakeGenericType( typeof(DateTime)); //通过List<>构建出List<DateTime>
1
2
1
2
最后说下 IsGenericParameter 

这个Property用于表明当前类型是一个T类型 

例如:
typeof(List<>).GetGenericArguments()
返回: new Type[]{ typeof(T) }
此时:
typeof(T).IsGenericParameter == True
typeof(T).GenericParameterPosition  == 0
1
2
3
4
5
1
2
3
4
5
对比:
typeof(List<DateTime>).GetGenericArguments()
返回: new Type[]{ typeof(DateTime) }
此时:
typeof(DateTime).IsGenericParameter  == False
typeof(DateTime).GenericParameterPosition    : throw exception
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐