我是C#的新手,但已经在网上搜索了一个小时而且没有快乐......
我需要确定对象是否是非零索引数组,即object [*]
我试过了:
if(v != null && v.GetType() == typeof(object[*]))
和 if(v是object [*])
以及重载方法Method(object v)和Method(object [*] v)
所有都会导致编译错误。
因为我无法将对象[*]强制转换为object []然后测试GetLowerBound(0)我该如何测试这种类型呢?
(请不要告诉我这个糟糕的代码/设计,它来自Excel,所以我显然无法改变它。)
答案 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.IsArray,Type.GetArrayRank和Type.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'在里面初始化你的对象!!!