以下Null条件运算符有什么问题?

pri*_*kar 5 c# nullable c#-6.0

出什么问题了

public int Add(int? a, int? b)
{
    return (a?.0 + b?.0);
}
Run Code Online (Sandbox Code Playgroud)

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

只是尝试以C#6.0的方式获得添加两个可空整数的味道.

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

i3a*_*non 11

好吧,首先x?.0,当并不意味着什么xint?.0不是财产或方法int?.

看起来好像你试图使用null合并运算符??而不是null条件运算?..如果是这种情况,您的方法应如下所示:

public int Add(int? a, int? b)
{
    return a ?? 0 + b ?? 0;
}
Run Code Online (Sandbox Code Playgroud)

如果情况并非如此,?.那么您可以使用扩展方法测试此运算符int,只返回其值:

public static int Identity(this int value)
{
    return value;
}
Run Code Online (Sandbox Code Playgroud)

并按原样尝试使用它(但有int?):

public int? Add(int? a, int? b)
{
    return a?.Identity() + b?.Identity();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想将这些int?参数组合在一起,则不需要任何新内容.这只是工作:

public int? Add(int? a, int? b)
{
    return (a + b);
}
Run Code Online (Sandbox Code Playgroud)

当两个参数都没null有时,两个选项都将返回结果,否则它将返回null.

  • @xanatos为什么你会认为它会返回`null + 5 == 5`? (2认同)