如何轻松比较2个以上数组参数的长度?

Eri*_*sen 4 c# arrays

我有一个对象有4个数组参数,所有参数都应该是相同的长度.

public Foo(
    int a,
    int b,
    type1[] arr1,
    type2[] arr2,
    type3[] arr3,
    type4[] arr4
    ){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

我想确保所有这些数组在构造函数中的长度相同,但我显然不能这样做

if (!(arr1.Length == arr2.Length == arr3.Length == arr4.Length))
Run Code Online (Sandbox Code Playgroud)

所以我去了

if (!(arr1.Length == arr2.Length && arr2.Length == arr3.Length && 
      arr3.Length == arr4.Length))
Run Code Online (Sandbox Code Playgroud)

但是这看起来并不是特别吸引人,如果我删除其中一个数组或其他东西,就不会那么清楚.

我认为必须有一个很好的方法来使用LINQ在它们的集合上执行此操作,但我的数组显然不是可枚举的.然后我有了创意(也许可能很傻)并想通过我可以用长度初始化一个hashset并检查它的长度是否为1.是否有一种标准/更好的方法来检查多个数组长度是否相等或者我的&&方法是否尽可能好得到?

Mat*_*son 6

如何编写辅助方法?

public static class Arrays
{
    public static bool AreAllTheSameLength(params Array[] arrays)
    {
        return arrays.All(a => a.Length == arrays[0].Length);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以这样称呼:

if (!Arrays.AreAllTheSameLength(arr1, arr2, arr3, arr4))
{
    // Throw or whatever.
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您通常使用反向布尔条件,则提供相反的方法可能更具可读性:

public static class Arrays
{
    public static bool HaveDifferingLengths(params Array[] arrays)
    {
        return arrays.Any(a => a.Length != arrays[0].Length);
    }
}

...

if (Arrays.HaveDifferingLengths(arr1, arr2, arr3, arr4))
{
    // Throw or whatever.
}
Run Code Online (Sandbox Code Playgroud)