gpt4 book ai didi

c# - 在可为空的 int 和 int 之间转换

转载 作者:太空宇宙 更新时间:2023-11-03 17:12:14 24 4
gpt4 key购买 nike

我想做这样的事情:

int? l = lc.HasValue ? (int)lc.Value : null; 

其中 lc 是可为 null 的枚举类型,例如 EMyEnumeration?。所以我想测试lc是否有值,如果有则将其int值赋给l,否则l为null。但是当我这样做时,C# 提示说“无法确定条件表达式的错误类型,因为‘int’和‘’之间没有隐式转换。

我怎样才能让它正确?提前致谢!!

最佳答案

你还必须转换 null:

int? l = lc.HasValue ? (int)lc.Value : (int?)null; 

顺便说一下,这是 conditional operator 之间的区别之一。和一个if-else:

if (lc.HasValue)
l = (int)lc.Value;
else
l = null; // works

相关的 C# 规范是 7.14 条件运算符:

?: operator 的第二个和第三个操作数 x 和 y 控制条件表达式的类型。

  • 如果 x 的类型为 X 而 y 的类型为 Y 那么
    • 如果存在从 X 到 Y 的隐式转换(§6.1),但不存在从 Y 到 X 的隐式转换,则 Y 是条件表达式的类型。
    • 如果存在从 Y 到 X 的隐式转换 (§6.1),但不存在从 X 到 Y,则 X 是条件表达式的类型。
    • 否则,无法确定表达式类型,并发生编译时错误。

因为 int 不能隐式转换为 null ,反之亦然,你会得到一个编译器错误。但您也可以将 enum 转换为 int? 而不是 int ,后者 是可转换的。然后编译器可以导出类型并进行编译:

int? l = lc.HasValue ? (int?)lc.Value : null; // works also

或者,正如谢尔盖在他的 answer 中提到的那样,直接:

int? l = (int?)lc;

关于c# - 在可为空的 int 和 int 之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21041519/

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