Classe générique C #: inférer un type non Nullable à partir du paramètre de type Nullable

Nov 05 2020

J'utilise des types de référence Nullable C # 8.

J'ai une classe générique qui pourrait accepter un type de référence Nullable comme paramètre de type.

Existe-t-il un moyen de déclarer un type non Nullable basé sur un paramètre de type générique qui pourrait être un type de référence Nullable (ou même une structure Nullable)?

abstract class Selector<T>
{
    T SelectedItem;

    // how to make item parameter not nullable?
    abstract string Format(T! item);

    // how to make item parameter not nullable?
    Func<T!, string> FormatFunction;
}

Réponses

4 YairHalberstadt Nov 05 2020 at 15:46

Utilisez DisallowNullAttribute:

using System.Diagnostics.CodeAnalysis;

abstract class Selector<T>
{
    T SelectedItem;

    public abstract string Format([DisallowNull] T item);
}

var selector = default(Selector<string?>)!;
selector.Format(null); //warning CS8625: Cannot convert null literal to non-nullable reference type.