如何在C#中输入typeof对象[*]?

时间:2012-03-07 14:48:07

标签: c# arrays

我是C#的新手,但已经在网上搜索了一个小时而且没有快乐......

我需要确定对象是否是非零索引数组,即object [*]

我试过了:

if(v != null && v.GetType() == typeof(object[*]))

和     if(v是object [*])

以及重载方法Method(object v)和Method(object [*] v)

所有都会导致编译错误。

因为我无法将对象[*]强制转换为object []然后测试GetLowerBound(0)我该如何测试这种类型呢?

(请不要告诉我这个糟糕的代码/设计,它来自Excel,所以我显然无法改变它。)

4 个答案:

答案 0 :(得分:4)

我想你想要:

Array array = v as Array;
if(array != null && array.GetLowerBound(0) != 0)
{
    ...
}

测试:

var array = Array.CreateInstance(typeof(object), new[] { 3 }, new[] { 1 });
Console.WriteLine(array.GetType());
Console.WriteLine(array.GetLowerBound(0));

输出:

System.Object[*]
1

答案 1 :(得分:2)

如有必要,请尝试Type.IsArrayType.GetArrayRankType.GetElementType

如果您需要致电GetLowerBound,可以安全地将对象投放到System.Array

答案 2 :(得分:0)

如果对象确实输入为object[]而不是string[]或其他数组,那么这样做

typeof(object[])

不需要数组大小的占位符,因为这是声明数组的常规方法

object[] myObjectArray;

编辑:

在您的情况下,您可以将语句简化为

if(v is object[])

((object[])null) is object[]

收益false

答案 3 :(得分:0)

 Object [] v = new Object[2];

 if (!ReferenceEquals(v, null))
          {
              if ((v.GetType() is System.Object)
                  && (v.GetType().IsArray))
              {

              }
          }

但只是' v'在里面初始化你的对象!!!