В приведенном ниже тексте C# уверен, что «свойство» никогда не будет нулевым, но я ЗНАЮ, что это может быть, потому что внешняя библиотека не создается с типами C # 8 / nullable:
#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty property = obj.SomeProperty;
DoStuff(property); // C# is confident that property is not null, here
Вот снимок экрана с условием:
Выполнение следующих действий также не дает нулевого предупреждения. C# все еще уверенно полагает, что внешний API совершенно не обнуляется:
#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty? property = obj.SomeProperty;
DoStuff(property); // C# is still confident that property is not null, here
Есть ли способ, которым я могу заставить C# признать, что переменная может быть нулевой, даже если она предположительно уверена, что не будет? Противоположность! символ. «Поверь мне, этот мусор может быть нулевым ..»
РАЗРЕШЕНО. ПРИНЯТО ОТВЕТ:
#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty? property = obj.SomeProperty ?? null;
DoStuff(property); // C# is now warning about possible null