我有这个属性:
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;
工作?他们似乎做同样的事情。
答案 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
可以在分支的每个分支中执行任何操作,对类型兼容性没有限制)