Как убедиться, что универсальный параметр не Nullable? - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь создать класс 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;
    }
}

Но есть проблема. T не может быть Nullable, как VS говорит:

Тип T должен быть ненулевым типом значения, чтобы использовать его в качестве параметра 'T' в универсальном типе или методе Nullable

Как мне убедиться, что T не Nullable?

Есть что-то вроде class X<@NotNull T> или что?

1 Ответ

5 голосов
/ 11 марта 2019

Чтобы тип T не обнулялся, ограничьте его struct:

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

Общие ограничения

...