Я хочу предупредить компилятор о возможных нулях из внешнего кода - PullRequest
3 голосов
/ 09 апреля 2020

В приведенном ниже тексте C# уверен, что «свойство» никогда не будет нулевым, но я ЗНАЮ, что это может быть, потому что внешняя библиотека не создается с типами C # 8 / nullable:

#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty property = obj.SomeProperty;
DoStuff(property); // C# is confident that property is not null, here

Вот снимок экрана с условием:

Failure 1

Выполнение следующих действий также не дает нулевого предупреждения. C# все еще уверенно полагает, что внешний API совершенно не обнуляется:

#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty? property = obj.SomeProperty;
DoStuff(property); // C# is still confident that property is not null, here

Failure 2

Есть ли способ, которым я могу заставить C# признать, что переменная может быть нулевой, даже если она предположительно уверена, что не будет? Противоположность! символ. «Поверь мне, этот мусор может быть нулевым ..»

РАЗРЕШЕНО. ПРИНЯТО ОТВЕТ:

#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty? property = obj.SomeProperty ?? null;
DoStuff(property); // C# is now warning about possible null

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Попробуйте:

ElementId? viewTemplateId = (revitView.ViewTemplateId ?? someNullTypeOfYourChoosing);

В качестве альтернативы разрешите структурам View и revitView.ViewTemplateId быть обнуляемыми / возвращать обнуляемые типы.

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

Вы можете написать метод «void MaybeNull ([System.Diagnostics.CodeAnalysis.MaybeNull] T t)» и использовать его.

...