Когда у вас есть общий метод, вы можете выполнить перегрузку, как это предлагается в Почему T? не является типом, допускающим значение NULL? Как вы можете заставить это работать?

public class Foo<T>
{
    public T? Bar()
    { 
        return null;
    }
}

Это кажется таким простым, поэтому я действительно не понимаю, почему нет простого способа сделать это.

-3
Ryanless 30 Май 2023 в 20:34
1
Вы уже связались с очень похожим вопросом. Можете ли вы объяснить, почему эти ответы вам не помогают?
 – 
Klaus Gütter
30 Май 2023 в 20:44
Поскольку это «так просто», вам следует предложить PR для github.com/dotnet/roslyn. Что касается этого вопроса, совершенно неясно, что вы на самом деле спрашиваете - связанный вопрос показывает, в каких случаях код будет компилироваться, а также аргументы в пользу того, почему его трудно выразить на языке... Пожалуйста, edit, чтобы уточнить, какую помощь вы здесь ищете.
 – 
Alexei Levenkov
30 Май 2023 в 21:00
 – 
Alexander
30 Май 2023 в 21:08

2 ответа

Вы почти закончили. Вам просто нужно точно указать, какой тип вы хотите ограничить. Например.:

public class Foo<T> where T : struct
{
    public  T? Bar()
    { 
        return null;
    }
}

Компилируется нормально.

0
Hekke 30 Май 2023 в 20:44

Как указано в связанном вопросе, вы можете использовать default(T):

return default(T) – мой источник: https://www.c -sharpcorner.com/article/defaultt-in-generics/

    {
        public T? Bar()
        {
            return default(T);
        }
    }
0
Alexei Levenkov 30 Май 2023 в 21:03