如何指定不实现特定接口的类型参数?

Ani*_*jee 6 .net c# generics type-constraints

我已经开发了一些对象的扩展方法,我不想在intellisense中使用/显示实现IEnumerable的对象.从概念上讲,我想要的东西如下

public static T SomeMethod<T>(this object value) where T != IEnumerable
        {

        }
Run Code Online (Sandbox Code Playgroud)

是否有可能在C#中强加这种约束?

编辑

对不起,我以错误的方式提出问题.我知道C#中允许的约束,我想知道的是,如果还有其他方法可以实现这一点吗?

Jon*_*eet 14

只是为了确认Øyvind的评论:C#中没有这样的限制.唯一类型的约束是:

  • where T : struct (不可为空的值类型约束)
  • where T : class (参考类型约束)
  • where T : SomeClassName (转换为特定的类约束)
  • where T : ISomeInterfaceName (转换为特定的接口约束)
  • where T : U (转换为另一种类型参数约束)
  • where T : new() (无参数构造函数约束)

请注意,我只分离出特定的类和接口约束,因为前者是主要约束,后者是次要约束.

  • @Anindya:在编译时,无论是短期还是长期都无法做到这一点.你可以在执行时抛出异常,但这样做非常讨厌. (2认同)