1

出于某种原因,Visual Studio 对这一行有问题:

MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  null : Convert.ToInt32(allIDValues[1]);

具体Convert.ToInt32(allIDValues[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,但不能使用 ? 操作员。

4

3 回答 3

3

将 更改? null? (int?) null

MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  (int?)null : Convert.ToInt32(allIDValues[1]);
于 2013-02-26T20:55:45.920 回答
3

尝试nullint?

MandatoryStakeholder.SupportDocTypeID = 
    (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  
       (int?)null : 
       Convert.ToInt32(allIDValues[1]);
于 2013-02-26T20:56:04.900 回答
2

那是因为在 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]));
于 2013-02-26T20:59:59.237 回答