我在面试中被问到了一个问题
public int Add(int? a, int? b)
{
return a+b;
}
null在一个地方传递。你将如何处理这个?
我说
if (a == null ) { //do something }
else { // do something }
他没有说什么。
等待回复。
答案 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)