我有一个dynamic
对象,有时是一个object
,有时是一个object[]
。
如何检查动态对象是否为数组?
使用Type.IsArray
:
来自 MSDN:
int [] array = {1,2,3,4};
Type t = array.GetType();
// t.IsArray == true
Console.WriteLine("The type is {0}. Is this type an array? {1}", t, t.IsArray);
为什么不只是 'is' 运算符(我刚刚在 Visual Studio 调试器的即时窗口上进行了快速测试),它可以工作。但不确定蒂姆的答案是否最佳。
void foo(object o)
{
if( o is System.Array)
{
//its array
}
}
为了补充 Rango 的原始响应,一种更通用的确定方法是使用类型的IsSerializable属性。因为如果对象是 List 或任何其他集合,IsArray 返回 false。
int [] array = {1,2,3,4};
Type t1 = array.GetType();
// t1.IsArray == true
List<int> list = new List();
list.AddRange(array);
Type t2 = list.GetType();
//t2.IsArray = false;
//t2.IsSerializable = true;
foreach(var i in list) {
// do stuff
}