NullableContextOptions 和 NullableReferenceTypes 有啥区别?

Posted

技术标签:

【中文标题】NullableContextOptions 和 NullableReferenceTypes 有啥区别?【英文标题】:What is the difference between NullableContextOptions and NullableReferenceTypes?NullableContextOptions 和 NullableReferenceTypes 有什么区别? 【发布时间】:2019-07-18 01:41:36 【问题描述】:

我一直在玩新的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有什么区别?

【问题讨论】:

This 可以帮到你。 自 VS 16.1 起,该属性被重命名为 Nullable。 NullableContextOptions 和 NullableReferenceTypes 都不再有效。名称较短且与命令行参数一致。 【参考方案1】:

在早期的预览版中,编译器只允许两种设置(真/假,意思是开/关)。

在后来的预览版中(从预览版 2 开始),编译器允许更多选项,因此更改了设置的名称和可能的选项。

以下是可能选项及其含义的文档:https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references

【讨论】:

请注意,属性名称现在只是&lt;Nullable&gt;【参考方案2】:

从 .NET Conf 2019(C# 8.0 版本)开始,实现默认不可空引用类型的正确方法是:

<PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
</PropertyGroup>

【讨论】:

【参考方案3】:

您需要拥有 Visual Studio 2019 预览版 2 或 .NET Core 3.0 预览版 2 才能使用 NullableReferenceTypes

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

NullableReferenceTypes 在 Visual Studio 2019 预览版 2 中更改为 &lt;NullableContextOptions&gt;enable&lt;/NullableContextOptions&gt;

PS:此功能在 .Net Framework

中尚不可用

【讨论】:

你是什么意思这个功能还没有在.net框架中工作?我可以使用以下行为我的 .net 框架应用启用此功能:#nullable enable。它实际上运作良好。但我不知道如何通过.csproj 文件启用它。 有问题here 基本上是我昨天创建的) @DervişKayımbaşıoğlu “此功能在 .Net Framework 中尚不可用”是什么意思?它对我来说很好。 @DervişKayımbaşıoğlu 它仅适用于新的 csproj 格式,否则 &lt;NullableContextOptions&gt; 将被忽略。

以上是关于NullableContextOptions 和 NullableReferenceTypes 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final

Java基础8---面向对象代码块和继承和this和super和重写和重载和final

JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()

malloc和free,brk和sbrk和mmap和munmap的使用和关系以及内存分配的原理