为什么这个条件语句不起作用并且做一个似乎做同样事情的if语句呢?

时间:2014-03-11 10:03:11

标签: c# conditional-statements

我有这个属性:

int? firstClientID;

为什么会这样

firstClientID = dataRow.IsFirstClientIDNull() 
                    ? null 
                    : (int.TryParse(dataRow.FirstClientID, out tempInt) 
                        ? tempInt 
                        : 0);

因为

而无法编译
  由于没有,因此无法确定

条件语句的类型   null和int之间的隐式转换

并且确实

if (dataRow.IsFirstClientIDNull())
    firstClientID = null;
else if (int.TryParse(dataRow.FirstClientID, out tempInt))
    firstClientID = tempInt;
else
    firstClientID = 0;

工作?他们似乎做同样的事情。

1 个答案:

答案 0 :(得分:1)

来自MSDN

  
    

first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。

  

即。您需要确保条件运算符的两条腿返回相同的类型(即通过Nullable<int>强制转换)。

firstClientID = dataRow.IsFirstClientIDNull() 
                ? (int?)null
                : (int.TryParse(dataRow.FirstClientID, out tempInt) 
                    ? tempInt 
                    : 0);

(条件运算符与if / then else分支实际上并不相同,因为条件运算符必须返回相同类型的数据,而if可以在分支的每个分支中执行任何操作,对类型兼容性没有限制)