将作为数组的对象转换为对象数组

时间:2011-02-15 20:46:39

标签: c# arrays type-conversion

你如何(在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 个答案:

答案 0 :(得分:3)

假设以下情况属实:

  • valueToCompare是一个数组的引用类型(不是,例如,int[]DateTime[]
  • valueToCompare是一维的数组(因此声明为一维数组或锯齿状数组)

您可以直接投放到object[]而不是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分支使用相同的参数调用自身)并最终生成{{1} }。我不相信这是你打算做的,但我已经离开了,因为我不知道你实际想要做什么。

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

尝试在这做什么?