如何确保通用参数不可为空?

时间:2019-03-11 20:36:24

标签: c# generics nullable

我正在尝试创建一个GameOption类,它将包含三个(实际上是四个)值:

  • 选项名称作为字符串

  • 作为T的选项

  • 默认值为Nullable

这是我班上的样子:

public class GameOption<T> {
    private T v;
    private string n;
    private T? def;
    public string Name { get => this.n; }
    public T Value { get => this.v; }
    public GameOption(T o, string name, T? def) {
        this.n = name;
        this.v = o;
    }
    public void ChangeValue(T o) {
        this.v = o;
    }
}

但是有一个问题。 VS表示T不能为空:

  

类型T必须是不可为空的值类型,才能在通用类型或方法Nullable中将其用作参数“ T”

如何确保T不为空?

是否有类似class X<@NotNull T>之类的东西?

1 个答案:

答案 0 :(得分:5)

为确保类型T不可为空,请将其限制为struct

public class GameOption<T> where T : struct { }

Generic Constraints