日期:2014-05-17  浏览次数:20755 次

能否通过泛型的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("*****");
        }