2016-06-13 37 views
0

我想知道是否有可能从数组中创建一个通用列表,其中的属性是不同的,数量和名称。我已经看到了许多可以在每个对象中都使用相同字段的帖子,但是没有哪些地方有不同的属性名称,并且有不同的数量。c#创建列表<object>从具有不同属性名称的数组

感觉就像应该有“映射”来填充我的名单不知何故,当一个属性到另一个的方式..

我访问一个Web服务 - 我有没有超调 - 这给了我一个给定对象的属性数量;所有的名字都很差,有些是不相关的。

我目前使用foreach循环遍历数组中的所有项目,然后使用我的通用列表中的对象的类构造函数添加到我的List。

如果我的数组中有大量项目返回,则此方法开始感觉非常脏,我想知道是否有更优雅的解决方案。

为了详细说明,假设我有对象的数组,与下面的特性,传递给我的web服务,我有无法控制:

  • HorribleName1(串)
  • HorribleName2(串)
  • HorribleName3(DATETIME)
  • HorribleName4(INT)

但我的本地类具有以下属性...

  • 名字(字符串)
  • 姓氏(字符串)
  • 出生日期(日期时间)

我知道HorribleName1是人的名字和HorribleName2是最后一个名称。我也知道HorribleName3是他们的出生日期,而HorribleName4是无关紧要的。

难道还有比这个创造我的泛型列表的一种更好的方式:

List<myPerson> myList = new List<myPerson>();  
foreach (ArrayObject person in HorribleArray) 
{ 
    myList.Add(new myPerson(HorribleName1, HorribleName2, HorribleName3)); 
} 
+0

'HorribleName3(DateTime的)'是他们的生日,不是4我假设。你的方式是......工作。 –

+0

是的,对不起。我试图弄清楚,但没有检查我发布的东西是否足够明显...... :) – Karl

回答

6

这是纯粹的审美,但你可以使用LINQ项目数据,像这样:

List<myPerson> myList = (from person in HorribleArray 
         select new Person() 
         { 
          FirstName = person.horribleName1, 
          Lastname = person.horribleName2, 
          Birthday = person.HorribleName3 
         }).ToList(); 

事实上,随着Jim建议,你仍然可以使用相同的构造函数语法而不是使用对象初始化器。

List<myPerson> myList = (from person in HorribleArray 
         select new Person(person.horribleName1, person.horribleName2, person.HorribleName3)).ToList(); 

然而,这是我个人的看法是,该投影更改名称性能尤其是当物体initialisers使代码更易读。

继吉姆的意见,我同意你可能不想让性能公众使用initialisers,所以另一种选择是使用命名参数:

List<myPerson> myList = (from person in HorribleArray 
         select new Person(
          firstName: person.horribleName1, 
          lastName: person.horribleName2, 
          birthday: person.HorribleName3)).ToList(); 
+0

您可能会考虑使用OP使用的构造函数语法。那就是'选择新人(HorribleName1,HorribleName2,HorribleName3)' –

+0

谢谢先生们。只要我对自己的数据进行测试,我会立即作出回答。 – Karl

+0

我同意对象初始化器使代码更具可读性。不幸的是,他们要求财产​​制定者是“公共”的,这引发了许多其他问题。我仍然没有决定我喜欢哪种好与坏的平衡。 –

相关问题