由于某种原因,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,但不能用?操作
答案 0 :(得分:3)
将? null
更改为? (int?) null
。
MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ? (int?)null : Convert.ToInt32(allIDValues[1]);
答案 1 :(得分:3)
尝试将null
转换为int?
MandatoryStakeholder.SupportDocTypeID =
(String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?
(int?)null :
Convert.ToInt32(allIDValues[1]);
答案 2 :(得分: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]));