下面的空条件运算符有什么问题?

What is wrong with the below Null-Conditional Operator?

有什么问题

public int Add(int? a, int? b)
{
    return (a?.0 + b?.0);
}

编译错误:无法将类型 'int?' 隐式转换为 'bool'

只是想尝试以 C#6.0 的方式添加两个可为 null 的整数。

我也知道其他方法(比如 hasvalue 等),但我正在试验这个新运算符。

嗯,首先,当 xint? 时,x?.0 没有任何意义。 0 不是 属性 或 int? 上的方法。

您似乎在尝试使用空合并运算符 ?? 而不是空条件运算 ?.。如果是这种情况,您的方法应如下所示:

public int Add(int? a, int? b)
{
    return a ?? 0 + b ?? 0;
}

如果不是这种情况,你的意思是 ?. 那么你可以使用 int 的扩展方法测试这个运算符,它的值只是 return:

public static int Identity(this int value)
{
    return value;
}

并像您最初尝试的那样使用它(但使用 int?):

public int? Add(int? a, int? b)
{
    return a?.Identity() + b?.Identity();
}

但是,如果您只想将这些 int? 参数组合在一起,则不需要任何新的东西。这很管用:

public int? Add(int? a, int? b)
{
    return (a + b);
}

当两个参数都不是 null 时,两个选项都会 return 结果,否则会 return null.