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

时间:2015-10-22 15:12:11

标签: c# .net arrays

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

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

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

2 个答案:

答案 0 :(得分:10)

value投射到基础System.Array类:

return ((Array) value).Length > 0

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

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

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

的支票

答案 1 :(得分:1)

避免必须在验证方法中询问类型的另一种方法是使用动态调度:

// Default overload
public static bool IsValid(object value) 
{ return false; }

// If it's an array
public static bool IsValid(Array value)
{
    return value.Length > 0;
}

...

bool isValid = IsValid((dynamic)obj); // Will call the overload corresponding to type of obj