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