แปลงรายการของวัตถุเป็นอาร์เรย์ของคุณสมบัติของวัตถุอย่างใดอย่างหนึ่ง


133

สมมติว่าฉันมีชั้นเรียนต่อไปนี้:

public class ConfigItemType
{
    public string Name { get; set; }
    public double SomeOtherThing { get; set; }
}

จากนั้นฉันก็สร้างรายชื่อคลาสต่อไปนี้ ( List<ConfigItemType> MyList)

ตอนนี้ฉันมีวิธีการที่มีลายเซ็นต่อไปนี้:

void AggregateValues(string someUnrelatedValue, params string[] listGoesHere)

ฉันจะพอดีMyListกับการlistGoesHereใช้ค่าในConfigItemType.Nameเป็นสตริงอาร์เรย์พารามิเตอร์ได้อย่างไร

ฉันค่อนข้างแน่ใจว่า Linq สามารถทำได้ .... แต่MyListไม่มีselectวิธีการ (ซึ่งเป็นสิ่งที่ฉันจะใช้)

คำตอบ:


281

คุณกำลังมองหา

MyList.Select(x=>x.Name).ToArray();

เนื่องจากSelectเป็นวิธีการขยายให้แน่ใจว่าได้เพิ่มเนมสเปซนั้นโดยการเพิ่ม

using System.Linq

ไปยังไฟล์ของคุณ - จากนั้นจะแสดงขึ้นพร้อมกับ Intellisense


นั่นคือสิ่งที่ฉันคิดเช่นกัน แต่ Select ไม่ปรากฏใน Intellisense
Vaccano

GAAAAAAA! ฉันพลาด linq รวม!
Vaccano

1
คุณต้องใช้โดยใช้ System.Data.Linq; จากนั้นทำตามคำตอบของ BrokenGlass
Rami Shareef

1
ไอ้โง่! อืม. ตัวแทนฟรีที่ช่วยฉันคิดออก
Vaccano

ทางออกที่ยอดเยี่ยม ฉันต้องการเข้าถึง String "id" ใน Object-List ของฉัน ทำงานได้อย่างสมบูรณ์แบบ List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box

19

ฉันค่อนข้างแน่ใจว่า Linq สามารถทำได้ .... แต่ MyList ไม่มีวิธีเลือก (ซึ่งเป็นสิ่งที่ฉันจะใช้)

ใช่ LINQ สามารถทำได้ มันเป็นเพียง:

MyList.Select(x => x.Name).ToArray();

ส่วนใหญ่มีแนวโน้มปัญหาคือการที่คุณทั้งสองไม่ได้มีการอ้างอิงถึงSystem.Coreหรือคุณจะหายไปสั่งสำหรับusingSystem.Linq



6

สำหรับทุกคนที่ติดอยู่กับ. NET 2.0 เช่นฉันลองทำตามวิธีต่อไปนี้ (ใช้ได้กับตัวอย่างใน OP):

ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci) 
{ 
   return ci.Name; 
}).ToArray();

โดยConfigItemListเป็นตัวแปรรายการของคุณ


ขอบคุณสำหรับการโพสต์สำหรับกลุ่ม. NET 2.0!
webworm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.