2011-02-15 77 views
1

你如何(在C#)转换的对象是一个数组对象的数组转换的对象是一个数组对象

东西按以下格式的数组:

bool Compare(object valueToCompare) 
{ 
    if(valueToCompare.IsArray()) 
    { 
     foreach(var value in (valueToCompare as Array)){ 
      if(Compare(value)); 
      return true; 
      return Compare(value); 
     } 
    } 
    else 
     return Compare(valueToCompare); 
} 

注意:上面的代码没有太大的作用。我只是原型设计。

+1

这个功能的目的是什么? – n8wrl 2011-02-15 20:50:07

+1

您只会比较数组中的第一个对象。对第一个值返回“Compare”的结果将忽略数组中的所有其他值。 – unholysampler 2011-02-15 20:51:45

回答

3

假设下列条件:

  • valueToCompare是参考类型的数组(未,比方说,一个int[]DateTime[]
  • 的阵列valueToCompare是一维的(所以无论是声明作为一维阵列或锯齿阵列)

您可以直接投射到object[]而不是o f Array

bool Compare(object valueToCompare) 
{ 
    Type t = valueToCompare.GetType(); 

    if(t.IsArray() && !t.GetElementType().IsValueType && t.GetRank() == 1) 
    { 
     foreach(var value in (valueToCompare as object[])) 
      return Compare(value); 
    } 
    else 
    { 
     return Compare(valueToCompare); 
    } 
} 

如果你的数组是有价值的类型,那么你基本上运气不好。

如果您的数组是多维的,那么您只需编写类似的检查来说明您希望支持的维数。

注:当你写它,这个功能将只调用自身递归(在else分支自称具有相同参数),并最终导致StackOverflowException。我不相信这是你打算做的,但我已经离开了它,因为我不知道你的实际上想要做什么。

此外,这实际上不会编译。我不确定你的循环打算比较什么;因为它只是与数组的第一个元素进行比较,但如果数组为空,那么它将不会返回值(因此编译错误)。

你在做什么在这里做?