C# Nullable<Enum> 在代码中设置为 null 时的值设置为 -1
C# Nullable<Enum> is being set a value of -1 when in code I'm setting it to null
借口:
ChestType 是一个枚举
public enum ChestType
{
COMMON,
GEMNGOLDCHEST,
GODLYCHEST,
ASSCHEST
}
slotAndChestIndex 是 ChestType?[]
chestSlotsAndChestsSaved 是一个整数[]
(对不起,不好的名字)
slotAndChestIndex[i] = (ChestType?)chestSlotsAndChestSaved[i] ?? null;
我相信上面这行是说:
"If I cant cast this int to a ChestType? then express it as null"
胸型?然而被设置为 -1 的值,这对我来说似乎很奇怪。
我是不是做错了什么?当我尝试将其设置为默认值(ChestType?)时发生的事件仍将其设置为 -1 哈哈。我认为任何 Nullable 类型的默认值都是 null。
请告诉我我不明白的地方!
您无法验证它是否以这种方式在您的枚举中定义;它只会在其中分配变量 chestSlotsAndChestSaved[i]
的值(即使它是 -1
并且未在您的枚举中定义)。
您可以通过以下方式验证这一点:
slotAndChestIndex[i] = (ChestType?)(Enum.IsDefined(typeof(ChestType), chestSlotsAndChestSaved[i]) ? chestSlotsAndChestSaved[i] : (int?)null);
PS:我还没有测试过代码,尽管 Enum.IsDefined(typeof(ChestType), chestSlotsAndChestSaved[i])
是你要走的路。
??
运算符和您正在执行的转换都不是您所想的那样。
首先,您使用的转换永远不会产生空值 - 从 int 转换为(大多数)枚举只会产生枚举类型的值,但可能具有数值,不是枚举成员之一。您转换为 ChestType?
而不是 ChestType
的事实并没有改变这一点。此外,如果像您所显示的那样执行直接转换并且无法执行,则会引发异常,并且结果不会为空。对于像这样的文字转换,这永远不会发生,但在 类.
之间套管时可能会发生
接下来,??
运算符,也称为 null-coalescing 运算符,如果左操作数不为空,则求值为左操作数,如果左操作数为空,则求值为右操作数无效的。因此,如果 chestSlotsAndChestSaved[i]
等于 null
,表达式将成为右手操作数 - 但是由于右操作数始终是 null
,表达式的那部分实际上什么都不做。
总的来说,slotAndChestIndex[i]
返回 -1 的最可能原因是因为 chestSlotsAndChestSaved[i]
是 -1。
借口:
ChestType 是一个枚举
public enum ChestType
{
COMMON,
GEMNGOLDCHEST,
GODLYCHEST,
ASSCHEST
}
slotAndChestIndex 是 ChestType?[]
chestSlotsAndChestsSaved 是一个整数[]
(对不起,不好的名字)
slotAndChestIndex[i] = (ChestType?)chestSlotsAndChestSaved[i] ?? null;
我相信上面这行是说: "If I cant cast this int to a ChestType? then express it as null"
胸型?然而被设置为 -1 的值,这对我来说似乎很奇怪。
我是不是做错了什么?当我尝试将其设置为默认值(ChestType?)时发生的事件仍将其设置为 -1 哈哈。我认为任何 Nullable 类型的默认值都是 null。
请告诉我我不明白的地方!
您无法验证它是否以这种方式在您的枚举中定义;它只会在其中分配变量 chestSlotsAndChestSaved[i]
的值(即使它是 -1
并且未在您的枚举中定义)。
您可以通过以下方式验证这一点:
slotAndChestIndex[i] = (ChestType?)(Enum.IsDefined(typeof(ChestType), chestSlotsAndChestSaved[i]) ? chestSlotsAndChestSaved[i] : (int?)null);
PS:我还没有测试过代码,尽管 Enum.IsDefined(typeof(ChestType), chestSlotsAndChestSaved[i])
是你要走的路。
??
运算符和您正在执行的转换都不是您所想的那样。
首先,您使用的转换永远不会产生空值 - 从 int 转换为(大多数)枚举只会产生枚举类型的值,但可能具有数值,不是枚举成员之一。您转换为 ChestType?
而不是 ChestType
的事实并没有改变这一点。此外,如果像您所显示的那样执行直接转换并且无法执行,则会引发异常,并且结果不会为空。对于像这样的文字转换,这永远不会发生,但在 类.
接下来,??
运算符,也称为 null-coalescing 运算符,如果左操作数不为空,则求值为左操作数,如果左操作数为空,则求值为右操作数无效的。因此,如果 chestSlotsAndChestSaved[i]
等于 null
,表达式将成为右手操作数 - 但是由于右操作数始终是 null
,表达式的那部分实际上什么都不做。
总的来说,slotAndChestIndex[i]
返回 -1 的最可能原因是因为 chestSlotsAndChestSaved[i]
是 -1。