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

时间:2015-03-10 07:58:54

标签: c# nullable c#-6.0

有什么问题
public int Add(int? a, int? b)
{
    return (a?.0 + b?.0);
}

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

尝试以C#6.0的方式尝试添加两个可以为空的整数。

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

1 个答案:

答案 0 :(得分:11)

x?.0x时,首先int?并不意味着什么。 0上的int?不是属性或方法。

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

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

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

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时,两个选项都会返回结果,否则会返回null