我想警告编译器有关外部代码可能出现的空值
I want to warn the compiler about possible nulls from external code
在下面,C# 确信 'property' 永远不会为空,但我知道它可以,因为外部库不是使用 C#8/可空类型生成的:
#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# 确认变量可能为空,即使它确信它不会为空?的对立面!象征。 'Trust me, this garbage can be null..'
已解决。接受的答案:
#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty? property = obj.SomeProperty ?? null;
DoStuff(property); // C# is now warning about possible null
尝试:
ElementId? viewTemplateId = (revitView.ViewTemplateId ?? someNullTypeOfYourChoosing);
或者,允许 View
和 revitView.ViewTemplateId
结构是 nullable/return 可空类型。
你可以写一个方法‘void MaybeNull([System.Diagnostics.CodeAnalysis.MaybeNull] T t)’并使用它。
在下面,C# 确信 'property' 永远不会为空,但我知道它可以,因为外部库不是使用 C#8/可空类型生成的:
#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# 确认变量可能为空,即使它确信它不会为空?的对立面!象征。 'Trust me, this garbage can be null..'
已解决。接受的答案:
#nullable enable
SomeExternalClass obj = GetSomeExternalObjectFromAnOldAPI();
SomeExternalProperty? property = obj.SomeProperty ?? null;
DoStuff(property); // C# is now warning about possible null
尝试:
ElementId? viewTemplateId = (revitView.ViewTemplateId ?? someNullTypeOfYourChoosing);
或者,允许 View
和 revitView.ViewTemplateId
结构是 nullable/return 可空类型。
你可以写一个方法‘void MaybeNull([System.Diagnostics.CodeAnalysis.MaybeNull] T t)’并使用它。