如果从调用函数传递给参数为可空整数的被调用函数,如何处理null?

时间:2014-12-16 10:53:24

标签: c#

我在面试中被问到了一个问题

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

null在一个地方传递。你将如何处理这个?

我说

if (a == null ) { //do something }
else { // do something }

他没有说什么。

等待回复。

6 个答案:

答案 0 :(得分:5)

作为一名采访者,我原本预料到这一点:

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

它被称为coalescing operator,以多种语言存在,完全是为了这个目的。它有一个very low precedence所以不要忘记( )

答案 1 :(得分:4)

你曾说过它也是正确的,但是面试官可能想知道你的最新情况......

 if(!a.HasValue)
    {
        a = 0;
    }

或更短的是: -

a = a != null ? a : 0;

并且Askolein建议的另一位运算符是??,如下所示: -

a ?? 0;

答案 2 :(得分:2)

他可能想要它

public int Add(int? a, int? b)
{
    a = a!= null ? a : 0;
    b = b!= null ? b : 0;
    return a+b;
}

或类似的东西,意味着您放置0而不是null

答案 3 :(得分:2)

这不是一个很好的问题。所提供的代码无法编译,最短的修复实际上是将函数签名更改为

public int? Add(int? a, int? b)

通过提升可支持整数支持添加:将null添加到另一个值只会产生null。这几乎肯定不是采访者所追求的;可能他们打算将null视为0,因为a ?? 0就足够了。但也许他们想要(a + b) ?? 0,如果任一操作数是null,则返回0。

好吧,第二个想法,也许它一个好问题,看看你是否会提出后续问题。最相关的一个是:"当你使用null s时,你想要这个函数做什么?"

答案 4 :(得分:1)

另一种解决方案是使用GetValueOrDefault的{​​{1}}方法替换Nullable<T>的默认值,T的默认值为int,如果它是{{1} }}

null

但实际上你应该问一下采访者想要使用null的方法,因为这也可能是有效的

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

答案 5 :(得分:0)

今天我了解了Null-Conditional Operator ( C# 6.0 )

return (a?. + b?.);

return (a + b);也可以正常使用