Cra*_*aig 2 c# generics constraints
我有一个使用此签名的通用方法:
private void MyGenericMethod<T>(T arg) where T : class
{}
Run Code Online (Sandbox Code Playgroud)
如果我传递一个整数给这个方法,我得到一个ArgumentException,传递的值与限制不匹配.这很好,但我怎么能预先确定我传递的内容是否与"类"约束匹配,以便不抛出异常?
编译器已经为你做了 - 你应该看到:
类型'int'必须是引用类型才能在泛型类型或方法'blah.MyGenericMethod(T)'中将其用作参数'T'
在编译时.
棘手的情况是:
where T : class 了很多.有时最好使用运行时验证TMakeGenericMethod等) - 再次,只需在运行时检查另外,请注意,where T : class 实际上并不意味着T是一个类 - 这意味着它是一个引用类型,可以包括接口和委托.同样,where T : struct并不意味着实际上T是一个struct-这意味着它是一个结构,是不是Nullable<>.