IsGenericType tells you that this instance of System.Type represents a generic type with all its type parameters specified. For example, List<int> is a generic type.
IsGenericTypeDefinition, on the other hand, tells you that this instance of System.Type represents a definition from which generic types can be constructed by supplying type arguments for its type parameters. For example, List<> is a generic type definition.
You can get a generic type definition of a generic type by calling GetGenericTypeDefinition:
var listInt = typeof(List<int>);
var typeDef = listInt.GetGenericTypeDefinition(); // gives typeof(List<>)
You can make a generic type from a generic type definition by providing it with type arguments to MakeGenericType:
var listDef = typeof(List<>);
var listStr = listDef.MakeGenericType(typeof(string));
IsGenericType:
typeof(DateTime).IsGenericType : false
typeof(List<int>).IsGenericType: true
typeof(Dictionary<,>).IsGenericType:true
IsGenericTypeDefinition:
typeof(List<int>).IsGenericTypeDefintion : false
typeof(List<>).IsGenericTypeDefinition :true
IsGenericTypeDefinition : 获取一个值,该值指示当前 Type 是否表示可以用来构造其他泛型类型的泛型类型定义。
也就是说表明 这个 type 是否可以用于构建泛型定义
比如 List<> 可以通过反射构建出 List,List
-
var typeList = typeof(List<>);
-
Type typeDataList = typeList.MakeGenericType( typeof(DateTime)); //通过List<>构建出List<DateTime>
原文链接:
https://blog.csdn.net/mengyue000/article/details/77604387
像AutoMapper和Mapster就是解决这种问题的,而我为什么选择Mapster,主要还是Mapster性能更好!
基本映射之映射到新对象
public void BasicMappingNewObject(SourceObjectTest sourc
该章节参考 asp.netcore框架揭秘(蒋金楠著)第3章。该片文章记录一个自己定义的依赖注入容器,在这个过程
中
我们可以:看到具体使用的那些技术,比如反射等一个依赖注入容器需要包含的几个概念用到的一些面向对象的设计模式和设计原则废话不多说,我们开始吧。
本文介绍.NET Framework提供的类型转换的不同可能性。最后,它提供了一个即用型解决方案:UniversalTypeConverter,它将几乎所有类型转换为另一种类型。
反射类型和泛型类型从反射的角度来说,泛型类型和普通类型的
区别
在于,泛型类型与一组类型参数(如果是泛型类型定义)或类型变量(如果是构造的类型)关联。泛型方法与普通方法的
区别
也在于此。反射的问题在于提供一种方式来检查类型参数或类型变量的此数组。如果是类型参数,反射还必须提供一种方式来检查约束。本节介绍提供检查泛型类型和方法的能力的 Type 和 MethodInfo 类的方法概述要理解反射处理泛型类型
在我们的应用程序
中
我们使用类描述我们的业务对象,为我们产生一些报表之类的,那就依赖大量不同的对象,我们创建一个帮助方法来转换我们的业务对象,或是一个List的业务对象到DataTables.
由于数据库表
中
字段可为null,对应.net 2.0以后我们可用Nullable类型来实现,那当我们业务对象类
中
字段有null时,并需要转换为DataTable时,这个场景产生,你可能用到以下方法...
typeof(DateTime).
IsGenericType
: false
typeof(Listint>).
IsGenericType
: true
typeof(Dict
ion
ary).
IsGenericType
:true123123
类型如果是泛型则为 true
但是要注意以下情况:
T[], List
GetGenericArguments
返回 Type 对象数组,这些对象表示为构造类型提供的类型变量,或泛型类型定义的类型参数。如果是MyList<int,Person> ,则返回int和Person类型的数组,如同Type[] tpyes={typeof(int),typeof(...
string listTypeName = "System.Collect
ion
s.Generic.List`1";
Type defByName = Type.GetType(listTypeNam...
if (propertyType.
IsGenericType
&&
propertyType.GetGeneric
TypeDef
init
ion
() == typeof(Nullable<>))
propertyType = pr...
Type 类
表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。这个类是线程安全的。
Type 为 System.Reflect
ion
功能的根,也是访问元数据的主要方式。使用 Type 的成员获取关于类型声明的信息,如构造函数、方法、字段、属性和类的事件,以及在其
中
部署该类的模块和程序集。
Type 是允许...
泛型类封装不是特定于具体数据类型的操作。泛型类最常用于集合,如链表、哈希表、堆栈、队列、树等,其
中
,像从集合
中
添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据类型无关。 一般情况下,创建泛型类的过程为:从一个现有的具体类开始,逐一将每个类型更改为类型参数,直至达到通用化和可用性的最佳平衡。创建您自己的泛型类时,需要特别注意以下事项: 将那些类型通用化为类型参数。 一般规则是,...
Console.WriteLine(typeof(DoubleList).BaseType.GetGenericArguments()[0].
IsGenericType
Def
init
ion
);
你能做出来吗?
Type convers
ion
Type = pi.PropertyType;
if (convers
ion
Type.
IsGenericType
&&
convers
ion
Type.GetGeneric
TypeDef
init
ion
().Equals(typeof(Nullable<>)))
C#
反射
中
的MakeGenericType函数可以用来指定泛型方法和泛型类的具体类型,方法如下面代码所示这里就不多讲了,详情看下面代码一切就清楚了:
using System;
using System.Reflect
ion
;
namespace RFTest
//类Reflect
ion
Test
中
定义了一个泛型函数DisplayType和泛型类MyGener...