什么where T : somevalue
意思?我刚刚看到一些代码说where T : Attribute
.我认为这与泛型有关,但我不确定这意味着什么或它在做什么.
有人知道吗?
它是对类型参数的约束,这意味着T
赋予泛型类或方法的类型必须从类继承Attribute
例如:
public class Foo: where T : Attribute { public string GetTypeId(T attr) { return attr.TypeId.ToString(); } // .. } Foo bar; // OK, DescriptionAttribute inherits Attribute Foo baz; // Compiler error, int does not inherit Attribute
这很有用,因为它允许泛型类使用类型的对象执行操作T
,并且知道任何T
必须也是的Attribute
.
在上面的例子中,可以GetTypeId
查询TypeId
of,attr
因为TypeId
是a的属性Attribute
,因为它attr
是一个T
必须是继承自的类型Attribute
.
约束也可以用于泛型方法,具有相同的效果:
public static void GetTypeId(T attr) where T : Attribute { return attr.TypeId.ToString(); }
您可以对类型进行其他限制; 来自MSDN:
where T: struct
type参数必须是值类型.可以指定除Nullable之外的任何值类型.
where T : class
type参数必须是引用类型; 这也适用于任何类,接口,委托或数组类型.
where T : new()
type参数必须具有公共无参数构造函数.与其他约束一起使用时,必须最后指定new()约束.
where T :
type参数必须是或从指定的基类派生.
where T :
type参数必须是或实现指定的接口.可以指定多个接口约束.约束接口也可以是通用的.
where T : U
为T提供的类型参数必须是或者从为U提供的参数派生.这称为裸类型约束.
此外,其他人说,你也有以下内容:
new() - T必须有默认构造函数
class - T必须是引用类型
struct - T必须是值类型