如何在C#中检查动态对象是否为数组?

18

我有一个dynamic对象,有时它是一个object,有时它是一个object[]

我该如何检查这个动态对象是否为数组?

3个回答

31

使用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); 

你是对的,我以为它不会起作用,只是因为它是动态的(GetType 当然不会在智能感知中显示...),但编译后它可以正常工作。谢谢。 - RollRoll

7

为什么不使用“is”运算符(我在Visual Studio调试器的即时窗口中进行了快速测试),它可以工作。但是不确定Tim的答案是否最佳。

void foo(object o)
{
if( o is System.Array)
{
//its array
}

}

0
为了补充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
}

3
"some text".GetType().IsSerializable 也为真,但它不是数组或列表。 - gsubiran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接