我有一个具有object
参数的重写方法。我确定这是否是一个数组,然后想确定它的长度:
public override bool IsValid(object value)
{
Type type = value.GetType();
if (type.IsArray)
{
return ((object[]) value).Length > 0;
}
else
{
return false;
}
}
问题是如果value
是int[]
,当我尝试转换为object[]
时会出错。有没有办法处理这个演员,所以它适用于任何类型的数组?
答案 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