编辑:感谢您的回答,那么应该如何编写以清楚每行中的条件是什么,或者为了便于阅读而保留原样?
我从answer采用了How do I concatenate two arrays in C#?来返回一个空数组,而不是抛出错误
public static T[] Concat<T>(this T[] x, T[] y)
{
if (x == null && y != null) return y;
if (x != null && y == null) return x;
if (x == null && y == null) return new T[0];
int oldLen = x.Length;
Array.Resize<T>(ref x, x.Length + y.Length);
Array.Copy(y, 0, x, oldLen, y.Length);
return x;
}
Resharper正在制作波浪线,&#34;表达总是如此&#34;暗示:
我不明白的是,对于2个不同的变量应该有4个不同的情况,每个变换2个,4的排列:( x为空,x不为空)(y为空,y不为空)
所以总共有4个案例我试图在if
中捕获更改线条的顺序只会将波浪线移动到最后一条线条。
答案 0 :(得分:2)
如果我们查看您的第一张和最后一张支票:
if (x == null && y != null) return y;
if (x == null && y == null) return new T[0];
请注意,我们已经测试过两个x == null && y != null
,所以如果我们通过该检查,那么我们就知道某些,如果x == null
{{1} } 为空(如果不是,那么我们就会返回y
。
这是一种在没有冗余检查的情况下检查相同条件的方法:
y
或者你可以在一行中完成所有这些事情:
if (x == null && y == null) return new T[0]; // If they're both null, return a new thing
if (x == null) return y; // Otherwise if only one of them is null,
if (y == null) return x; // then return the other one
答案 1 :(得分:1)
if (x == null && y != null) return y;
if (x != null && y == null) return x;
if (x == null && y == null) return new T[0];
1如果x为null且y不为null,则返回y
2如果x不为null且y为null,则返回x
3如果x为null,则y必须根据您的第一个条件为空。
答案 2 :(得分:1)
布尔代数和命题逻辑 shenanigans
当你写这个
if (x == null && y != null) return y;
然后,当您再次比较x == null
时,y == null
无疑是真实的
它不能是其他任何东西
<强>更新强>
if (x == null) return y ?? new T[0];
if (y == null) return x;
...
int oldLen = x.Length;
Array.Resize<T>(ref x, x.Length + y.Length);
Array.Copy(y, 0, x, oldLen, y.Length);
return x;
关于您将获得的简单