C#generic确实*不*实现某些东西

时间:2010-10-01 19:50:02

标签: c# generics

我知道我可以制作像

这样的方法
private T MyFun<T>() 
  where T : IMyInterface
{...}

我可以反过来,即T没有实现IMyInterface吗?具体的用例是我不想允许nullables,但我一般都很好奇。

3 个答案:

答案 0 :(得分:2)

如果你不想要可以为空的类型,你可以这样做。

private T MyFun<T>() 
  where T : struct
{...}

答案 1 :(得分:0)

不,在一般情况下,您无法指定“排除列表”。但是,为了防止允许Nullable类型,可以使用“where T:class”约束。因为Nullable是一个结构,所以会产生预期的效果。

编辑:哎呀,看起来我太仓促了 - 你是否在考虑如何防止任何可以为null或特别是Nullable的东西被允许?

答案 2 :(得分:0)

你总是可以在运行时抛出一个NotSupportedException()。诚然,不如编译器阻止它