将一个Array值复制到另一个数组

时间:2013-11-07 06:58:15

标签: c# asp.net

我有2个object数组。第一个对象数组具有我想要复制到其他数组的属性。

第一个对象数组

HotelRoomResponse[] hr=new HotelRoomResponse[100];

第二个对象数组

RateInfos[] rt = new RateInfos[100];

现在我要做的是复制第一个数组的属性,如

rt=hr[].RateInfo;

但它给出了错误。什么是正确的方法????

3 个答案:

答案 0 :(得分:6)

你不能像这样投射一个数组。您实际上必须循环 - 尽管您不需要在自己的代码中手动执行此操作。 LINQ使它非常简单,例如:

RateInfos[] rt = hr.Select(x => x.RateInfo).ToArray();

或者您可以使用Array.ConvertAll

RateInfos[] rt = Array.ConvertAll(hr, x => x.RateInfo);

在这两种情况下,某处仍然存在循环 - 它不在您的代码中。

如果你是C#的新手并且不了解LINQ,lambda表达式,委托等,那么你可以自己编写代码:

RateInfos[] rt = new RateInfos[hr.Length];
for (int i = 0; i < rt.Length; i++)
{
    rt[i] = hr[i].RateInfo;
}

所有这三个都会达到相同的效果。

  • 第一种方法可能是现代C#中最惯用的方法。它适用于任何输入类型,您可以从ToArray()更改为ToList()以获取List<RateInfos>而不是数组等。
  • 第二种方法比第一种方法稍微有效,并且可以与.NET 2.0一起使用(而在.NET 3.5中引入LINQ) - 但是你仍然需要C#3编译器或更高版本。它只能用数组编写,但ConvertAll有类似的List<T>方法。
  • 第三种方法是最有效的,但显然也是更多的代码。新手理解起来比较简单,但是当你知道所有语言功能如何适用于前两个解决方案时,并没有明确表达你想要实现的目标。

答案 1 :(得分:5)

RateInfos[] rt = hr.Select(item => item.RateInfo).ToArray();

答案 2 :(得分:2)

使用LINQ:

RateInfos[] rt = hr.Select(x => x.RateInfo).ToArray();