将 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);
}
考虑以下 .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);
}