C# 将一个数组值复制到另一个数组

C# 将一个数组值复制到另一个数组,c#,asp.net,C#,Asp.net,我有两个对象数组。对象的第一个数组具有要复制到其他数组的属性 对象的第一个数组 HotelRoomResponse[] hr=new HotelRoomResponse[100]; RateInfos[] rt = new RateInfos[100]; 第二个对象数组 HotelRoomResponse[] hr=new HotelRoomResponse[100]; RateInfos[] rt = new RateInfos[100]; 现在我要做的是复制第一个数组的一个属性,比如

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

对象的第一个数组

HotelRoomResponse[] hr=new HotelRoomResponse[100];
RateInfos[] rt = new RateInfos[100];
第二个对象数组

HotelRoomResponse[] hr=new HotelRoomResponse[100];
RateInfos[] rt = new RateInfos[100];
现在我要做的是复制第一个数组的一个属性,比如

rt=hr[].RateInfo;
但它给出了错误。正确的方法是什么???

使用LINQ:

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

你不能像那样投射一个数组。您必须有效地进行循环——尽管您不需要在自己的代码中手动进行循环。LINQ使其变得非常简单,例如:

RateInfos[] rt = hr.Select(x => x.RateInfo).ToArray();
或者您可以使用:

在这两种情况下,在某个地方仍然有一个循环——它不在代码中

如果您对C#非常陌生,还不了解LINQ、lambda表达式、委托等,那么您可以自己编写代码:

RateInfos[] rt = new RateInfos[hr.Length];
for (int i = 0; i < rt.Length; i++)
{
    rt[i] = hr[i].RateInfo;
}
RateInfos[]rt=新的RateInfos[hr.Length];
对于(int i=0;i
这三者都将达到同样的效果

  • 第一种方法可能是现代C#中最惯用的方法。它适用于任何输入类型,您可以从
    ToArray()
    更改为
    ToList()
    ,以获得
    列表而不是数组,等等
  • 第二种方法的效率略高于第一种方法,并且可以与.NET2.0一起使用(而LINQ是在.NET3.5中引入的)——不过您仍然需要C#3编译器或更高版本。它只在使用数组编写时工作,但是对于
    列表
    有一个类似的
    ConvertAll
    方法
  • 第三种方法是最有效的,但显然也有更多的代码。对于新手来说,它更容易理解,但当您知道前两个解决方案的所有语言功能是如何工作的时,它并不能清楚地表达您想要实现的目标

费率信息与酒店客房响应如何关联+1用于
数组.ConvertAll
。查看您的
您仍然需要C#3编译器
note@IlyaIvanov:它与.NET 2.0兼容。它是在C#3中引入的(没有C#3.5这样的东西),但是当你瞄准.NET2.0时,你仍然可以使用它。我仔细地选择了答案中的措辞:)
没有C#3.5这样的东西
当然,我指的是.NET3.5。不管怎样,和往常一样,回答得很好。@IlyaIvanov:对-但关键是lambda表达式是一个C#特性,而不是.NET库或CLR特性。这就是为什么将语言版本与CLR或库版本分开至关重要的原因:)@DeepakRaghav:您了解它是如何工作的吗?你用过LINQ吗?值得一读,以确保你知道这里发生了什么。是的,我用了LINQ。不多,但足以理解答案。