将 foreach 与 Enum.GetValues() 一起使用时如何修复代码分析警告 CS8605?

How to fix Code Analysis warning CS8605 when using foreach with Enum.GetValues()?

考虑以下 .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)) 不可能 return 任何空值。

有没有更好的方法来解决这个问题?

(回答我自己的问题,因为我刚刚意识到我应该做什么!)

您可以将 Enum.GetValues() 的 return 值转换为正确的类型,如下所示:

foreach (var enumValue in (MyEnum[]) Enum.GetValues(typeof(MyEnum)))
{
    Console.WriteLine(enumValue);
}