gpt4 book ai didi

C# 8 - 枚举上的 CS8605 "Unboxing possibly null value"

转载 作者:行者123 更新时间:2023-12-03 16:10:39 25 4
gpt4 key购买 nike

我有一个项目 <nullable>enable</nullable>在 .csproj 中
我遇到了一些奇怪的警告行为。
我有一个遍历枚举的 foreach 语句,枚举中的 foreach 项运行一些代码。
但是当我尝试执行此操作时,VS2019 会标记 CS8605“取消装箱可能为空值”警告。
enter image description here
完整的代码显示在这里。错误显示超过 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 类型的返回如果这里有一些隐式转换,那就是这个问题的根源。
我目前的解决方案只是抑制警告。但我想了解这里发生了什么。也许有更好的方法来迭代枚举。

最佳答案

I'm wandering if, since Enum.GetValues returns of type Array if thereis some implicit casting going on here that is the root of thisproblem.


你是对的,foreach 循环进行了隐式转换。这是问题的根源。
正如您所指出的 Enum.GetValues返回 Array 类型的对象.与 nullable context Array 的已启用项属于可空类型 object? .当您遍历 Array在一个 foreach 循环中,每个 Array item 被强制转换为迭代变量的类型。在您的情况下,每个 Array object? 类型的项目被强制转换为类型 TextureSet .此类型转换产生警告 Unboxing possibly null value .
如果您在 sharplab.io 中尝试您的代码您会看到内部 C# 编译器将考虑的 foreach 循环转换为清楚显示问题的 while 循环(为简单起见,我省略了一些代码块):
IEnumerator enumerator = Enum.GetValues(typeof(TextureSet)).GetEnumerator();
while (enumerator.MoveNext())
{
// Type of the enumerator.Current is object?, so the next line
// casts object? to TextureSet. Such cast produces warning
// CS8605 "Unboxing possibly null value".
TextureSet t = (TextureSet) enumerator.Current;
}

My solution currently is just to suppress the warning. ... Perhaps there is better way to iterate over an enum.


您也可以使用下一个 approach修复警告:
foreach (TextureSet t in (TextureSet[]) Enum.GetValues(typeof(TextureSet)))
{
}

关于C# 8 - 枚举上的 CS8605 "Unboxing possibly null value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63621869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com