作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目 <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];
}
我很难理解为什么
t
有潜力为空,因为枚举是不可为空的。
Enum.GetValues
Array
类型的返回如果这里有一些隐式转换,那就是这个问题的根源。
最佳答案
I'm wandering if, since
Enum.GetValues
returns of typeArray
if thereis some implicit casting going on here that is the root of thisproblem.
Enum.GetValues
返回
Array
类型的对象.与
nullable context
Array
的已启用项属于可空类型
object?
.当您遍历
Array
在一个 foreach 循环中,每个
Array
item 被强制转换为迭代变量的类型。在您的情况下,每个
Array
object?
类型的项目被强制转换为类型
TextureSet
.此类型转换产生警告
Unboxing possibly null value
.
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.
foreach (TextureSet t in (TextureSet[]) Enum.GetValues(typeof(TextureSet)))
{
}
关于C# 8 - 枚举上的 CS8605 "Unboxing possibly null value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63621869/
我是一名优秀的程序员,十分优秀!