c# - 将 foreach 与 Enum.GetValues() 一起使用时如何修复代码分析警告 CS8605?
问题描述
考虑以下 .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))
不可能返回任何空值。
有没有更好的方法来解决这个问题?
解决方案
(回答我自己的问题,因为我刚刚意识到我应该做什么!)
您可以将返回值Enum.GetValues()
转换为正确的类型,如下所示:
foreach (var enumValue in (MyEnum[]) Enum.GetValues(typeof(MyEnum)))
{
Console.WriteLine(enumValue);
}
推荐阅读
- javascript - 需要自定义反应原生圆圈菜单帮助
- jquery - 解析错误:shell 脚本中第 1 行第 7 列的数字文字无效
- android - 为什么 cornetFamly 只适用于圆角的风格而不适用于切角的风格?
- amazon-web-services - 使用 ansible 并使用 aws profile 或 arn 获取 AWS SSM 参数
- email - 电子邮件服务器的最小 RAM
- angular - ng 测试失败
- python-3.x - 'WANDB_MODE' 不是内部或外部命令、可运行程序或批处理文件
- hadoop - 即使在添加新磁盘后 Hadoop 节点不健康问题
- javascript - 将大 int 数转换为单个数字的数组
- bluetooth - 如何使用 bluetoothctl 使用 MQTT 实时报告重复的接近信标