转换.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,而不能用?操作人员

转换.ToInt32适用于if语句,但不适用于with?操作员

尝试将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]));