![](/img/trans.png)
[英]C# Create object with dynamic properties : LINQ select List<object> values by property names array
[英]c# Create List<object> from array with different Property Names
我想知道是否可以從數量和名稱各不相同的數組中創建通用列表。 我已經看到許多帖子可以在每個對象中使用相同的字段來執行此操作,但是沒有一個在屬性名稱不同且屬性名稱不同的地方。
感覺當填充我的列表時,應該有一種方法可以將一個屬性“映射”到另一個屬性。
我可以訪問Web服務-我無法控制它-它為給定對象提供了許多屬性; 所有人的名字都不好,有些則無關緊要。
我目前正在使用foreach循環遍歷數組中的所有項目,然后使用通用列表中對象的類構造函數將其添加到列表中。
如果我在數組中返回了大量項目,則此方法開始感覺很臟,我想知道是否有更優雅的解決方案。
詳細來說,假設我有一個對象數組,下面的屬性在Web服務中傳遞給我,我無法控制:
但是我的本地課程具有以下屬性...
我知道HorribleName1是此人的名字,而HorribleName2是此人的名字。 我也知道HorribleName3是他們的出生日期,並且HorribleName4是無關緊要的。
有沒有比這更好的方法來創建我的通用列表:
List<myPerson> myList = new List<myPerson>();
foreach (ArrayObject person in HorribleArray)
{
myList.Add(new myPerson(HorribleName1, HorribleName2, HorribleName3));
}
這純粹是美觀的,但是您可以使用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();
但是,我個人認為,尤其是在投影更改名稱的屬性時,對象初始化程序使代碼更具可讀性。
按照吉姆的評論,我同意您可能不希望公開屬性以使用初始化程序,因此另一種選擇是使用命名參數:
List<myPerson> myList = (from person in HorribleArray
select new Person(
firstName: person.horribleName1,
lastName: person.horribleName2,
birthday: person.HorribleName3)).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.