在参数中使用速记条件

时间:2015-03-09 19:02:18

标签: c#

我有一个方法,它将一个可以为null的int作为参数:

myMethod(int? parameter) {
//body
}

并且,在调用此方法的方法中,我将传递的参数显然可以是null或int(但首先是字符串)。我想要做的是以下几点:

myMethod(
    !string.IsNullOrEmpty(someString)?
    Convert.ToInt32(someString) : null
);

但是我收到了错误:

  

条件表达式的类型无法确定,因为' int'之间没有隐式转换。和null

2 个答案:

答案 0 :(得分:4)

您需要将一侧投射到int?

 !string.IsNullOrEmpty(someString)
  ? Convert.ToInt32(someString)   
  : (int?)null

答案 1 :(得分:3)

您希望您使用的条件运算符的值评估为int?,但第二个及其操作数的类型都不是int? 。它们都可以隐式转换为int?,但是当C#需要确定表达式的类型时,给定选项A和B作为选项,它将总是选择A或B ,而不是类型C碰巧有来自A和B的隐式转换。

至于做什么,只需将最后两个操作数中的任何一个转换为int?类型。 (这与哪一个无关。)