表达始终是真正的Resharper提示

时间:2018-02-14 01:35:17

标签: c# optimization resharper

编辑:感谢您的回答,那么应该如何编写以清楚每行中的条件是什么,或者为了便于阅读而保留原样?

我从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;暗示: enter image description here

我不明白的是,对于2个不同的变量应该有4个不同的情况,每个变换2个,4的排列:( x为空,x不为空)(y为空,y不为空)

所以总共有4个案例我试图在if

中捕获

更改线条的顺序只会将波浪线移动到最后一条线条。

3 个答案:

答案 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;

关于您将获得的简单