有没有办法定义一个带有约束的泛型接口,该约束可以为null(但不能是值类型)?

bsh*_*52s 1 .net c# generics nullable

我想定义一个通用接口,它允许可以为空的值类型(int?,double?等)和类类型(也可以为null).我不想允许简单的值类型.有没有办法做到这一点?

Jon*_*eet 6

编辑:给定问题标题,我假设您要约束类型参数不是非可空值类型.在问题正文中指定它可能是个好主意.

不 - 没有这样的限制.实际上,两者classstruct约束都禁止可以为可为空的值类型的参数.

您可以创建一个没有约束的接口,但只创建两个实现:

interface IFoo<T> { }

class FooClass<T> : IFoo<T> where T : class {}

class FooNullableValue<T> : IFoo<Nullable<T>> where T : struct {}
Run Code Online (Sandbox Code Playgroud)

这当然不能阻止任何其他人实施IFoo<int>.如果您能给我们更多背景知识,我们可以提供更多帮助.