C # Kelas generik: simpulkan tipe non-nullable dari parameter tipe nullable

Nov 05 2020

Saya menggunakan jenis referensi nullable C # 8.

Saya memiliki kelas generik yang mungkin menerima jenis referensi nullable sebagai parameter jenis.

Apakah ada cara untuk mendeklarasikan tipe non-nullable berdasarkan parameter tipe generik yang mungkin berupa tipe referensi nullable (atau bahkan struct 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;
}

Jawaban

4 YairHalberstadt Nov 05 2020 at 15:46

Penggunaan 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.