【发布时间】:2020-08-27 18:07:45
【问题描述】:
我在 .csproj 中有一个带有 <nullable>enable</nullable> 的项目
我遇到了一些奇怪的警告行为。
我有一个遍历枚举的 foreach 语句,枚举中的 foreach 项运行一些代码。 但是当我尝试执行此操作时,VS2019 会标记 CS8605“取消装箱可能为空值”警告。
此处显示完整代码。错误显示在t 的减速上。
public static class Textures
{
private static readonly Dictionary<TextureSet, Texture2D> textureDict = new Dictionary<TextureSet, Texture2D>();
internal static void LoadContent(ContentManager contentManager)
{
foreach(TextureSet t in Enum.GetValues(typeof(TextureSet)))
{
textureDict.Add(t, contentManager.Load<Texture2D>(@"textures/" + t.ToString()));
}
}
public static Texture2D Map(TextureSet texture) => textureDict[texture];
}
我很难理解为什么t 有可能为空,因为枚举是不可为空的。
我想知道,由于Enum.GetValues 返回类型为Array,是否有一些隐式转换是这个问题的根源。
我目前的解决方案只是抑制警告。但我想了解这里发生了什么。也许有更好的方法来迭代枚举。
我正在使用 .net Core 3.1 和 Visual Studio Community 2019 16.7.2
【问题讨论】:
-
请注意,此问题预计将在 .NET 5 中消失,因为 IEnumerator.Current 已从
object?类型更改为可忽略为空的object类型。 github.com/dotnet/runtime/issues/37918
标签: c# enums c#-8.0 nullable-reference-types