понимание Возможный возврат нулевой ссылки

Я начал получать эти предупреждения с предварительным просмотром VS19 и

<TargetFramework>net5.0</TargetFramework>
<LangVersion>preview</LangVersion>`
<Nullable>enable</Nullable>

Вот пример из класса, который проксирует многие свои методы для ImmutableList<T>:

class C<T> {
  readonly ImmutableList<T> composed;
  public C() => composed = ImmutableList<T>.Empty;
  ...
  public T Find(Predicate<T> match) => composed.Find(match);
  ...
}

предупреждение CS8603: Возможный возврат нулевой ссылки. дляFind метод

Я не понимаю почему, поскольку у него такая же подпись, что и ImmutableList<T>.Find? Как лучше всего решить эту проблему?

2 ответа

Решение

Это описано в документации

Возврат

Первый элемент, который соответствует условиям, определенным указанным предикатом, если он найден; в противном случае значение по умолчанию для типа T.

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

Примерно такая же подпись, в коде вы могли видеть это:

[return: MaybeNull]
public T Find(Predicate<T> match)

Смотрите код на github

И документы для [MaybeNull]

Указывает, что вывод может быть пустым, даже если соответствующий тип его запрещает.

Метод Find вернет значение по умолчанию (T) при отсутствии совпадения, которое имеет значение NULL, если T является ссылочным типом. Если вы хотите предотвратить это, вы можете ограничить свой класс, например, разрешив только типы значений.

Другие вопросы по тегам