这是可能的:带有约束的类型的c#集合,还是泛型类型的集合?

Jon*_*ist 3 c# generics collections

我正在尝试将类型存储在集合中,以便稍后我可以实例化集合中类型的对象.但我不知道如何以最好的方式做到这一点.

到目前为止我有什么:

List<Type> list = new List<Type>();
list.Add(typeof(MyClass));
var obj = (MyClass)Activator.CreateInstance(list[0]);
Run Code Online (Sandbox Code Playgroud)

我希望Type在集合中有一些约束,或者更好,只是集合中的泛型类型而不是实例化Type对象.这可能吗?

LBu*_*kin 5

这不是通用集合约束的工作方式.

通用约束限制哪些类型对于实例化泛型类型是合法的.存在几种不同类型的约束,但是常见的约束将通用参数限制为继承或者是给定类型的实例,或者是实现特定接口(或接口集)的类型.

Type另一方面,它是一个描述应用程序或其中一个库类型信息的类.特定种类的类型不继承或扩展Type-而有不同的情况下Type可用每种类型.您不能使用通用约束来控制Type可能添加到集合中的实例.

如果没有关于如何"约束"集合中的信息的更多细节,很难说你应该采取什么样的路线.例如,如果您要做的只是确保只存储唯一类型(无重复),则可以使用HashSet(而不是列表)来实现.但是如果你想要更专业的东西 - 比如限制Type可以添加到某些类型子集的实例,那么你可能需要实现自己的集合,并在Add/Insert方法中实现gaurd逻辑.