是否可以对泛型中的Type T强制执行某些限制?
答案 0 :(得分:4)
是的,您可以对T进行一些约束。约束是通过where
子句引入的。查看here
where T: struct
type参数必须是值类型。可以指定除Nullable之外的任何值类型。有关详细信息,请参阅使用可空类型(C#编程指南)。
where T: class
type参数必须是引用类型;这也适用于任何类,接口,委托或数组类型。
where T : new()
type参数必须具有公共无参数构造函数。与其他约束一起使用时,必须最后指定new()约束。
where T : <base class name>
type参数必须是或来自指定的基类。
where T : <interface name>
type参数必须是或实现指定的接口。可以指定多个接口约束。约束接口也可以是通用的。
where T : U
为T提供的类型参数必须是或者从为U提供的参数派生而来。
答案 1 :(得分:3)
答案 2 :(得分:2)
请参阅通用参数constraints。在创建自己的泛型类型和方法时,约束允许您应用有关类型参数的一些规则,例如:它们支持所需的接口或具有默认构造函数。