我有以下代码:
void DoSomething<T>() where T : class
{
if(typeof(T).IsAbstract)
// do something with T
else
// throw an error
}
是否可以强制 T 是泛型定义中的抽象类(类似于 where T : abstract class
)?
最佳答案
这是不可能的。参见 C# 规范的第 10.1.5 节。特别是,语法非常清楚地表明这是不可能的。
type-parameter-constraints-clauses:
type-parameter-constraints-clause
type-parameter-constraints-clauses type-parameter-constraints-clause
type-parameter-constraints-clause:
where type-parameter : type-parameter-constraints
type-parameter-constraints:
primary-constraint
secondary-constraints
constructor-constraint
primary-constraint , secondary-constraints
primary-constraint , constructor-constraint
secondary-constraints , constructor-constraint
primary-constraint , secondary-constraints , constructor-constraint
primary-constraint:
class-type
class
struct
secondary-constraints:
interface-type
type-parameter
secondary-constraints , interface-type
secondary-constraints , type-parameter
constructor-constraint
new ( )
您可以在方法主体中包含一个保护子句:
Contract.Requires<InvalidOperationException>(!typeof(T).IsAbstract);
关于.NET 泛型 : Is it possible to enforce abstract class on generic type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249362/