3

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

第一个对象数组

HotelRoomResponse[] hr=new HotelRoomResponse[100];

第二个对象数组

RateInfos[] rt = new RateInfos[100];

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

rt=hr[].RateInfo;

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

4

3 回答 3

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()to更改ToList()为获取 aList<RateInfos>而不是数组等。
  • 第二种方法比第一种方法效率稍高一些,并且适用于 .NET 2.0(而 LINQ 是在 .NET 3.5 中引入的)——不过您仍然需要 C# 3 或更高版本的编译器。它只能像使用数组编写的那样工作,但ConvertAll对于List<T>.
  • 第三种方法是最有效的,但显然代码也更多。对于新手来说更容易理解,但是当您知道所有语言功能如何用于前两种解决方案时,并不能清楚地表达您想要实现的目标。
于 2013-11-07T07:00:48.537 回答
5
RateInfos[] rt = hr.Select(item => item.RateInfo).ToArray();
于 2013-11-07T06:59:57.047 回答
2

使用 LINQ:

RateInfos[] rt = hr.Select(x => x.RateInfo).ToArray();
于 2013-11-07T07:00:13.950 回答