C# Convert.ToInt32在if语句中工作,但不与?操作人员

C# Convert.ToInt32在if语句中工作,但不与?操作人员,c#,visual-studio-2010,C#,Visual Studio 2010,由于某些原因,Visual Studio在这一行中存在问题: MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ? null : Convert.ToInt32(allIDValues[1]); 特别是Convert.ToInt32allIDValues[1]部分。错误为C:这些类型不兼容“null”:“int” 但是,如果我用下面

由于某些原因,Visual Studio在这一行中存在问题:

MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  null : Convert.ToInt32(allIDValues[1]);
特别是Convert.ToInt32allIDValues[1]部分。错误为C:这些类型不兼容“null”:“int”

但是,如果我用下面的代码模拟该逻辑,它就没有问题了:

if (string.IsNullOrEmpty(allIDValues[1]) || Convert.ToInt32(allIDValues[1]) == 0)
                stakeHolder.SupportDocTypeId = null;
            else
                stakeHolder.SupportDocTypeId = Convert.ToInt32(allIDValues[1]);
MandatoryGapper.SupportDocTypeID的类型为int?。不确定为什么我可以在if语句中将字符串转换为int,但不能使用?接线员。

是否更改?空到?智力?空

换衣服?空到?智力?空

尝试将null强制转换为int

尝试将null强制转换为int


这是因为在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]));

这是因为在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]));

我相信三元数应该在两个分支中具有相同的返回类型。所以你需要一个int?我相信三元数应该在两个分支中具有相同的返回类型。所以你需要一个int?这是空的,而不仅仅是空的。