读书人

可否通过泛型的where子句要求某个变量

发布时间: 2013-01-21 10:15:39 作者: rapoo

能否通过泛型的where子句要求某个变量必须声明了某特性?
如:

[Xml]
class a{}

class b{}

void m<T>(T v) where T:????; //这里怎么写

希望实现 m(new a()); 编译通过, m(new b()) 编译不通过
[解决办法]
约束某个变量是不行的,你可以声明一个基类或接口就可以实现了。
约束就这么几种:
参见MSDN:类型参数的约束(C# 编程指南)
[解决办法]
只能在里面写 ,或者像ls说的写个基类或接口
void m<T>(T v) where T : class
{
var length = typeof(T).GetCustomAttributes(typeof(Xml), false).Length;
if (length == 0)
throw new Exception("*****");
}

读书人网 >C#

热点推荐