【发布时间】:2020-07-02 14:27:48
【问题描述】:
考虑以下 .Net Core 3.1 代码:
using System;
namespace CoreConsoleA
{
public static class Program
{
static void Main()
{
// Warning CS8605, Unboxing a possibly null value:
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
Console.WriteLine(enumValue);
}
}
}
enum MyEnum { Zero, One, Two };
}
启用代码分析和可空性检查后,上面的代码会引发“警告 CS8605 将可能的空值拆箱”。
我可以使用“#pragma warning disable CS8605”来抑制警告。
我也可以这样写代码:
foreach (MyEnum? enumValue in Enum.GetValues(typeof(MyEnum)))
{
Console.WriteLine(enumValue!.Value);
}
但这似乎有点奇怪,因为Enum.GetValues(typeof(MyEnum)) 不可能返回任何空值。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
您可以在
GetValues之后添加OfType<MyEnum>()或Cast<MyEnum>()。问题可能是由于Array的GetValue方法返回object?
标签: c# code-analysis nullable-reference-types