NullableContextOptions和NullableReferenceTypes之间有什么区别?

8
我已经玩过一段时间新的 c# 8.0 NullableReferenceTypes 功能。 我有点困惑于如何通过更改 .csproj 文件来启用此功能。
我的意思是,为了启用此功能,您必须在 .csproj 文件中添加以下行:
<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

但我还发现了另一种方法:

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableReferenceTypes>true</NullableReferenceTypes>
</PropertyGroup>

所以它们几乎相同,但无论如何。 NullableContextOptionsNullableReferenceTypes之间有什么区别?


这个可能会对你有所帮助:链接 - Dudi Keleti
自从VS 16.1版本以来,该属性已更名为Nullable。NullableContextOptions和NullableReferenceTypes都不再有效。该名称更短,并与命令行参数对齐。 - Drew Noakes
3个回答

8
早期的预览版本中,编译器只允许两种设置(true/false, 表示开/关)。
在以后的预览版本(从第二个预览版开始),编译器允许更多选项,因此更改了设置的名称和可能的选项。
以下是可能选项及其含义的文档:https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references

1
请注意,现在属性名称仅为 <Nullable> - Drew Noakes

4
自从.NET Conf 2019(C# 8.0版本发布)以来,实现默认非空引用类型的正确方式是:
<PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
</PropertyGroup>

0

为了使用NullableReferenceTypes,您需要拥有Visual Studio 2019预览版2或.NET Core 3.0预览版2。

您还需要启用C# 8.0。检查LangVersion元素以确保其设置为8.0

NullableReferenceTypes在Visual Studio 2019预览版2中更改为<NullableContextOptions>enable</NullableContextOptions>

PS:此功能尚未在.Net Framework中运行


你的意思是 .NET Framework 还不支持这个功能?我可以使用以下代码行来启用我的 .NET Framework 应用程序中的此功能:#nullable enable。它实际上运行良好。但我不知道如何通过 .csproj 文件来启用它。 - isxaker
这里有一个问题:https://github.com/dotnet/docs/issues/9517#issuecomment-466805405 - Derviş Kayımbaşıoğlu
基本上,我昨天创建了它。 - isxaker
@DervişKayımbaşıoğlu,你说的“这个功能在 .Net Framework 中还没有工作”是什么意思?对我来说它很好用。 - Konrad
1
@DervişKayımbaşıoğlu 它只适用于新的 csproj 格式,否则 <NullableContextOptions> 将被忽略。 - Konrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接