【发布时间】:2020-05-24 07:08:46
【问题描述】:
我正在阅读文档并编写一些测试代码来检查新功能。对于DoesNotReturn属性it says:
编译器将调用该方法后的任何代码标记为不可达,直到遇到适当的 catch 子句。
所以我写了下面的代码来测试一下:
using System;
using System.Diagnostics.CodeAnalysis;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start");
var resMsg = SomeMethod();
Console.WriteLine($"resMsg: {resMsg}");
}
[DoesNotReturn]
static string SomeMethod()
{
throw new Exception("Some test exception");
}
}
我希望编译器在SomeMethod() 调用之后的下一行会出现类似“检测到无法访问的代码”的警告,但没有任何警告。为什么?
已编辑:
项目使用C# 8.0
可空上下文已启用
这是整个 *.csproj 文件的内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-rc0001"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta0007"/>
</ItemGroup>
</Project>
【问题讨论】:
-
我认为该属性仅与NRT分析有关,与一般代码可达性无关。
-
@JonSkeet 你能告诉NRT分析是什么意思吗?我试图用谷歌搜索这个术语,但没有发现任何与编程相关的内容
-
可空引用类型分析。 (如,它只是关于 C# 8 可空引用类型的处理。)
-
@JonSkeet,老实说,我不知道这个属性与 Nullable Reference Type 分析有何关系。它是如何使用的,我该如何使用它?
-
您链接到的整个页面都是关于可空引用类型分析的。标题是“保留属性有助于编译器的空状态静态分析”。如果你觉得你需要使用这些,你可能不需要。