Ответ 1
Иван Сердюк сказал: "Начиная с атрибутов ReSharper 9.2 EAP4[ItemCanBeNull]
и [ItemNotNull]
можно применить к объектам типа" Задача "и" Лень ". Он отлично работает!
P.S Пожалуйста, не забудьте обновить аннотации Jetbrains.
Недавно я выяснил, что вы можете использовать аннотацию [CanBeNull]
в С#, чтобы сообщить ReSharper (и другим аддонам), что метод может вернуть null. Это здорово, потому что это заставляет ReSharper напоминать мне, когда я не обрабатываю эти ситуации.
Однако для async
методов, возвращающих Task
или Task<T>
, поведение неожиданно.
Например, рассмотрим этот пример:
[CanBeNull]
public async Task<string> GetSomeName() {
var time = DateTime.Now;
if(time.Second == 30) {
return "Jimmy";
} else {
return null;
}
}
Я знаю, что этот сценарий немного странный, но для простоты, несите меня. Если я (с включенным ReSharper), то попытайтесь вызвать метод в другом месте, он предупреждает неправильно. Например:
var myValue = await GetSomeName();
var subValue = myValue.Trim(); //here, ReSharper should warn me that subValue is null.
Здесь ReSharper предупреждает меня в неправильном месте. Первая строка генерирует предупреждение (и утверждает, что сама задача может быть нулевой, что неверно). Вторая строка не генерирует предупреждение, в котором должно быть предупреждение.
Если бы я полностью подчинялся ReSharper, этот код должен был бы быть написан:
var myTask = GetSomeName();
if(myTask != null) {
//this is silly, and is always true, but ReSharper thinks that the Task can be null due to the CanBeNull attribute.
var myValue = await myTask;
var subValue = myValue.Trim(); //this could generate an error, but ReSharper doesn't warn me.
}
Это ошибка с ReSharper, которую я должен отправить? Или я использую аннотацию неправильно? Думаю, мы все можем согласиться с тем, что сама задача никогда не может быть null
, поэтому я не знаю, как это имеет смысл.
[ItemCanBeNull]
и [ItemNotNull]
можно применить к объектам типа" Задача "и" Лень ". Он отлично работает!
P.S Пожалуйста, не забудьте обновить аннотации Jetbrains.
Вы столкнулись с ограничением анализа нулевого значения ReSharper. Он пытается рассматривать возвращаемое значение (задание) как потенциальное значение null, а не результат. Тем не менее, этот отличный запрос функции - я предлагаю голосовать за эту проблему: http://youtrack.jetbrains.com/issue/RSRP-376091