Правильная аннулируемая аннотация для asyn c generi c метода, который может возвращать значение по умолчанию (T) - PullRequest
0 голосов
/ 27 марта 2020

Я конвертирую кодовую базу в C # 8 с обнуляемыми ссылочными типами. Я сталкивался с методом, подобным методу в этом вопросе , но asyn c.

public async Task<T> GetAsync<T>()
{
    // sometimes returns default(T); => warning CS8603 Possible null reference return
}

T может быть любым типом, включая ссылочные типы, допускающие значение NULL или типы значений, допускающие значение NULL.

Чтобы было ясно, я понимаю, ПОЧЕМУ этот метод вызывает предупреждение. Я хотел бы знать, какие аннотации можно использовать для ее решения.

  • Я знаю, что могу использовать #nullable disable или default(T)!, но я надеялся на что-то меньшее " молот ".
  • Я знаю, что не могу использовать [return: MaybNull], потому что это относится к самому Task, а не к T.

Есть ли какой-либо другой атрибут / аннотации, которые я могу применить, чтобы сделать компилятор счастливым, или default(T)! мой единственный вариант?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

По моему опыту, вы можете использовать Task<T?> GetAsync<T>() where T: class для решения вашей проблемы.

0 голосов
/ 03 апреля 2020

Поиски и дополнительные исследования показывают, что предпочтительным способом подавления предупреждения в этом контексте является использование оператора ! в default(T).

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...