这是我的代码:
object w = 44;
var k1 = (w is double
? ((Convert.ToSingle(w)))
: ((unchecked((uint)Convert.ToInt64(w)))));
if (w is double)
{
w = 22;
}
结果是
k1
= 44.0和w
== 44;我不知道为什么结果会有所不同!
假设
w
是double,在这种情况下,k1
应该是44.0,而w
应该是22。现在,假设
w
不是double,在这种情况下,k1
应该是44,而w
应该是44。问题是什么 !?
最佳答案
不管k1
是什么类型,用于初始化w
的条件表达式的类型都是相同的。编译器必须在编译时基于2个可能值的类型来确定条件表达式的类型。
cond ? float: uint
这些类型不同,但是
uint
可以隐式转换为float
,因此编译器选择将其作为返回类型。关于c# - 如果结果与if不同,为什么要内联C#?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20710310/