C# 通用<;T>;()vs泛型(System.Type)。泛型与反射

C# 通用<;T>;()vs泛型(System.Type)。泛型与反射,c#,generics,reflection,C#,Generics,Reflection,在哪里使用更合适 class Entity<T> {} new Entity<User>() 在处理了反射和代码生成之后,我意识到了System.Type的重要性。经过一个月的发展和熟悉,我带着怀疑的心情回顾我的选择 如果您不需要反射,这可能不适用于您。这取决于您在实体内部拥有什么。在实体类中是否有任何类型为T的字段或类型为T的方法的参数?如果您只在实体内部执行typeof(T),那么传入系统可能会更简单 另一个不同点是,您可以将约束与泛型一起使用,因此您可以执行类实

在哪里使用更合适

class Entity<T> {}

new Entity<User>()
在处理了反射和代码生成之后,我意识到了System.Type的重要性。经过一个月的发展和熟悉,我带着怀疑的心情回顾我的选择


如果您不需要反射,这可能不适用于您。

这取决于您在实体内部拥有什么。在实体类中是否有任何类型为T的字段或类型为T的方法的参数?如果您只在实体内部执行
typeof(T)
,那么传入系统可能会更简单


另一个不同点是,您可以将约束与泛型一起使用,因此您可以执行
类实体,其中T:isomoInterface

,如果您使用第二种方法,您将在实体类中每次都对用户对象进行类型转换(最有可能是这样)。如果您使用泛型方法,即第一种方法,您将不需要这种方法。

泛型方法
实体
能够在编译时使用泛型类型约束来强制执行规则和功能(例如,
T
必须具有公共无参数构造函数,并且是引用类型)。每个实例上的类型不需要任何存储空间,因为
实体
实体
都是离散的类型-但作为对这一点的重申:您不能有一个异构的
列表如果泛型解决了您的问题,您就使用泛型;如果反射解决了您的问题,您就使用反射。你想解决哪个问题?很好,谢谢。我正在编写一个工具来分析代码,并根据语言特性的上下文用法生成警告。这是很好的洞察力。
class Entity
{
   public Entity(System.Type type) 
   {
   }
}

new Entity(typeof(User))