转换.ToInt32适用于if语句,但不适用于with?操作员
本文关键字:适用于 不适用 with 操作员 ToInt32 if 语句 转换 | 更新日期: 2023-09-27 18:01:11
由于某些原因,Visual Studio对这一行有问题:
MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ? null : Convert.ToInt32(allIDValues[1]);
具体是CCD_ 1部分。错误为"C#:这些类型不兼容'null':'int'">
然而,如果我用下面的逻辑来模仿这个逻辑,它就没有问题:
if (string.IsNullOrEmpty(allIDValues[1]) || Convert.ToInt32(allIDValues[1]) == 0)
stakeHolder.SupportDocTypeId = null;
else
stakeHolder.SupportDocTypeId = Convert.ToInt32(allIDValues[1]);
MandatoryStakeholder.SupportDocTypeID
的类型为int?。不知道为什么我可以在if语句中将字符串转换为int,而不能用?操作人员
尝试将null
强制转换为int?
MandatoryStakeholder.SupportDocTypeID =
(String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?
(int?)null :
Convert.ToInt32(allIDValues[1]);
将? null
更改为? (int?) null
。
MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ? (int?)null : Convert.ToInt32(allIDValues[1]);
这是因为在if版本中,
stakeHolder.SupportDocTypeId = Convert.ToInt32(allIDValues[1]);
正在静默地转换为
stakeHolder.SupportDocTypeId = new int?(Convert.ToInt32(allIDValues[1]));
要获得三元等价物,您需要将代码更改为:
MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ? null : new int?(Convert.ToInt32(allIDValues[1]));