Bir nesne listesini nesnenin özelliklerinden birinin dizisine dönüştürme


133

Aşağıdaki sınıfa sahip olduğumu varsayalım:

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

ve sonra aşağıdaki sınıfların bir listesini yapıyorum ( List<ConfigItemType> MyList)

Şimdi aşağıdaki imzaya sahip bir yöntemim var:

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

Ben sığabilecek nasıl MyListgirişlistGoesHere de değeri kullanarak ConfigItemType.Nameparametreler dize dizi olarak?

Linq'in bunu yapabileceğinden oldukça eminim .... ama MyListbunun üzerinde bir selectmetodu yok (kullanmış olacağım şey buydu).

Yanıtlar:


278

Sen arıyorsun

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

Yana Selectbir uzantısı yöntemi yapmak olduğundan emin a ekleyerek bu ad eklemek için

using System.Linq

dosyanıza - daha sonra Intellisense ile görünecektir.


Ben de öyle düşündüm. Ancak Select, intellisense'de görünmüyor.
Vaccano

GAAAAAAA! Linq dahil özledim!
Vaccano

1
System.Data.Linq kullanarak kullanmanız gerekir; ardından BrokenGlass yanıtını takip edin
Rami Shareef

1
Ben aptalım Ah peki. Çözmeme yardım ettiğin için bedava rep.
Vaccano

harika çözüm. Nesne Listemdeki "id" dizesine erişmek istedim. Mükemmel çalıştı List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box

19

Linq'in bunu yapabileceğinden oldukça eminim .... ancak MyList'in üzerinde bir seçme yöntemi yok (bu benim kullanmış olacağım şeydi).

Evet, LINQ bunu yapabilir. Basitçe:

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

Büyük olasılıkla sorun, ya referansınızın olmaması System.Coreya da usingiçin bir direktifin eksik olmasıdır System.Linq.



6

Benim gibi .NET 2.0 ile sıkışmış herkes için aşağıdaki yolu deneyin (OP'deki örnek için geçerlidir):

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

nerede ConfigItemList listenizi değişkendir.


.NET 2.0 kalabalığına gönderdiğiniz için teşekkürler!
webworm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.