这是我的代码:

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/

10-13 09:23