我有一个对象有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.是否有一种标准/更好的方法来检查多个数组长度是否相等或者我的&&方法是否尽可能好得到?
如何编写辅助方法?
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)