确定对象是否是任何类型的数组,并访问数组长度

Yet*_*ish 7 .net c# arrays

我有一个带有object参数的重写方法.我确定这是否是一个数组,然后想确定它的长度:

public override bool IsValid(object value)
{
    Type type = value.GetType();
    if (type.IsArray)
    {
        return ((object[]) value).Length > 0;
    }
    else
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是如果valueint[],当我尝试强制转换时它会出错object[].有没有办法处理这个演员,所以它适用于任何类型的数组?

Mic*_*Liu 11

铸造value到基System.Array类:

return ((Array) value).Length > 0
Run Code Online (Sandbox Code Playgroud)

通过使用as运算符,您可以进一步简化代码:

public static bool IsValid(object value)
{
    Array array = value as Array;
    return array != null && array.Length > 0;
}
Run Code Online (Sandbox Code Playgroud)

注意:这将返回true多维数组,例如new int[10, 10].如果您想false在这种情况下返回,请添加支票array.Rank == 1.