使用接口实现约束C#泛型参数

时间:2017-06-12 11:32:30

标签: c# generics

为了说明我的问题,我写了一个简单的方法:

public static T ConvertTo<T>(...)
    where T : ISomeInterface
{
    // return an instance of T
}

显然这个方法可以像

一样调用
ConvertTo<ISomeInterface>(...)

但就我而言,它没有意义。方法应该返回实现ISomeInterface的类的实例。现在我抛出NotSupportedException用于该方法无法使用的任何类型,我对此解决方案感到满意。但是如果我可以在编译时过滤出一个接口本身就会更好。

所以我的问题是:是否可以使用接口的实现约束泛型参数?

1 个答案:

答案 0 :(得分:2)

  

所以我的问题是:是否可以通过接口的实现约束泛型参数?

不,没有。您找到了最合适的解决方案:classnew(),其中class仅过滤掉结构等。class {{1一起使用是唯一真正的解决方案,但实际上过于严格的解决方案。

您可能对代码分析器或AOP有好运,可以在编译时筛选出错误的调用。