【发布时间】:2015-09-30 16:48:17
【问题描述】:
我不能使用下面的代码有什么原因吗?
ulong test(int a, int b)
{
return a == b ? 0 : 1;
}
它告诉我:
Cannot implicitly convert type 'int' to 'ulong'. An explicit conversion exists (are you missing a cast?)
以下将起作用:
ulong test(int a, int b)
{
return false ? 0 : 1;
}
我知道如何解决问题。我只是想知道原因。
谢谢。
【问题讨论】:
-
在最后的代码块中,如果将
false替换为true是否有效?也许有某种原因1可以隐式转换为0不能? -
已经测试过了,没什么区别。
-
false ? 0 : 1是常量表达式。return a == b ? 0 : 1不是。int类型的常量表达式允许隐式转换为ulong,如果它适合ulong范围。 -
我认为的原因是编译器评估表达式,所以第二个没有错误。它将被编译为
return 1 -
“我只是想知道原因。”因为这会无缘无故地增加编译器的复杂性。
标签: c# ternary-operator conditional-operator ulong