понимание Возможный возврат нулевой ссылки
Я начал получать эти предупреждения с предварительным просмотром 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
Указывает, что вывод может быть пустым, даже если соответствующий тип его запрещает.
Метод Find вернет значение по умолчанию (T) при отсутствии совпадения, которое имеет значение NULL, если T является ссылочным типом. Если вы хотите предотвратить это, вы можете ограничить свой класс, например, разрешив только типы значений.