我<nullable>enable</nullable>在 .csproj 中有一个项目,我遇到了一些奇怪的警告行为。
我有一个遍历枚举的 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];
}
Run Code Online (Sandbox Code Playgroud)
我正在努力理解为什么有可能为t空,因为枚举是不可为空的。我想知道,因为Enum.GetValues类型的返回Array是否有一些隐式转换在这里进行,这是这个问题的根源。我目前的解决方案只是抑制警告。但我想了解这里发生了什么。也许有更好的方法来迭代枚举。
我正在使用 .net Core 3.1 和 Visual Studio 社区 2019 16.7.2