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

如何在C#中键入对象[*]?,c#,arrays,C#,Arrays,我对C#相当陌生,但已经在网上搜索了一个小时,没有任何乐趣 我需要确定对象是否为非零索引数组,即对象[*] 我试过: if(v != null && v.GetType() == typeof(object[*])) 及 如果(v是对象[*]) 以及重载方法方法(对象v)和方法(对象[*]v) 所有这些都会导致编译错误 由于我无法将对象[*]强制转换为对象[],然后测试GetLowerBound(0),我该如何测试这种类型 (请不要告诉我这个糟糕的代码/设计,它来自Excel,

我对C#相当陌生,但已经在网上搜索了一个小时,没有任何乐趣

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

我试过:

if(v != null && v.GetType() == typeof(object[*]))
及 如果(v是对象[*])

以及重载方法方法(对象v)和方法(对象[*]v)

所有这些都会导致编译错误

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

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

尝试,如果需要的话


如果需要调用
GetLowerBound
可以安全地将对象强制转换为
System.Array

如果对象的类型确实是
object[]
而不是
string[]
或其他数组,则可以执行此操作

typeof(object[])
不需要数组大小的占位符,因为这是声明数组的正常方式

object[] myObjectArray;

编辑:

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

if(v is object[])

((object[])null) is object[]
产生
false

我想您需要:

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

输出:

System.Object[*]
1

但只是“v”不是你里面的对象

您是从哪里获得
[*]
语法的?我从未见过,它是用来表示非零基索引数组,即不以[0]开头的数组。在Excel代码中使用了很多(它们从1开始)。你说的“非零索引数组”是什么意思?有趣的是:@AndreiG数组的下限不是零。+1对于代码的正确答案,@Andre Loker第一个得到了答案,所以接受了他的答案,但非常感谢没有,因为你不能将object[]强制转换为object[]。[]不是占位符星号
*
是占位符。我的意思是,写
object[]
,而不是
object[*]
。星号在此上下文中不是占位符,objeft[Asterisk]是一个非零索引数组,即不是从零开始的。好的,我理解。在C#中声明的数组总是以零为基的索引。非零基索引仅适用于COM API(例如Excel)返回的数组。您可以使用重音grave(一种反斜杠撇号)来转义代码部分。我的US-ASCII键盘上ESC键下方的键。-->`
System.Object[*]
1
 Object [] v = new Object[2];

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

              }
          }