Я работаю с библиотекой, в которой есть некоторые методы «Try», которые не имеют должным образом аннотаций для передачи информации о допустимости значений NULL. Это становится проблемой, когда компилятор не может определить, является ли переменная нулевой или нет.
// signature: bool TryGetProperty(string propName, out string? value); // (no NotNullWhen(true) attribute)
if (!obj.TryGetProperty(propName, out var value))
{
// fail case
throw ...;
}
// compiler doesn't know that `value` cannot be null at this point
UseTheValue(obj, value!); // have to add '!' to dismiss the warnings
AnotherUseOfValue(obj, value!); // other uses doesn't affect the nullability
Похоже, что единственный способ сообщить компилятору, что оно не равно нулю, — это добавить дополнительную явную проверку нуля в другом месте или получить доступ к свойству объекта в области видимости. Проблема в том, что я не всегда буду работать с объектом непосредственно в окружающем коде.
if (value is not null) // redundant
AnotherUseOfValue(obj, value); // value is not null now
//or
_ = value.someProperty; // value cannot be null if this succeeds
Есть ли способы восстановить эту нулевую проверку без необходимости ее явного добавления, без обновления библиотеки для добавления правильной аннотации? Отключить предупреждения невозможно.
Это выглядит менее проблематично, но мне это не нравится:
if (!obj.TryGetProperty(propName, out var value) || value is null) // add extraneous check here
{
// fail case
throw ...;
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -annotated
Добавить проверку на обнуляемость для переменной out, которая не аннотирована должным образом. ⇐ C#
Место общения программистов C#
1768616009
Anonymous
Я работаю с библиотекой, в которой есть некоторые методы «Try», которые не имеют должным образом аннотаций для передачи информации о допустимости значений NULL. Это становится проблемой, когда компилятор не может определить, является ли переменная нулевой или нет.
// signature: bool TryGetProperty(string propName, out string? value); // (no NotNullWhen(true) attribute)
if (!obj.TryGetProperty(propName, out var value))
{
// fail case
throw ...;
}
// compiler doesn't know that `value` cannot be null at this point
UseTheValue(obj, value!); // have to add '!' to dismiss the warnings
AnotherUseOfValue(obj, value!); // other uses doesn't affect the nullability
Похоже, что единственный способ сообщить компилятору, что оно не равно нулю, — это добавить дополнительную явную проверку нуля в другом месте или получить доступ к свойству объекта в области видимости. Проблема в том, что я не всегда буду работать с объектом непосредственно в окружающем коде.
if (value is not null) // redundant
AnotherUseOfValue(obj, value); // value is not null now
//or
_ = value.someProperty; // value cannot be null if this succeeds
Есть ли способы восстановить эту нулевую проверку без необходимости ее явного добавления, без обновления библиотеки для добавления правильной аннотации? Отключить предупреждения невозможно.
Это выглядит менее проблематично, но мне это не нравится:
if (!obj.TryGetProperty(propName, out var value) || value is null) // add extraneous check here
{
// fail case
throw ...;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79869883/add-nullability-check-for-out-variable-that-isnt-properly-annotated[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия