2012-08-15 20 views
15

kullanarak dönüştürün ArrayList'u LINQ kullanarak List<string>'a dönüştürmek istiyorum. Ben ToList() çalıştı ama bu yaklaşım çalışmıyor:'ArrayList' öğesini 'List <string>' (veya 'Liste <T>') 'ya LINQ

ArrayList resultsObjects = new ArrayList(); 
List<string> results = resultsObjects.ToList<string>(); 
+0

Olası kopyalar (http://stackoverflow.com/ sorular/786268/in-net-how-do-you-convert-an-ArrayList-to-a-kesinlikle yazılan-jenerik-list-withou) –

cevap

23

Kişisel kodunu aslında bir List<ArrayList> ziyade tek ArrayList göstermektedir. Eğer gerçekten sadece bir ArrayList var ediyorsanız, muhtemelen isterdim: ArrayList zayıf yazılan çünkü

ArrayList resultObjects = ...; 
List<string> results = resultObjects.Cast<string>() 
            .ToList(); 

Cast çağrı gereklidir - sadece IEnumerable değil IEnumerable<T> uygular. LINQ’dan Object’e kadar neredeyse tüm LINQ operatörleri IEnumerable<T>’a dayanmaktadır.

Bu, ArrayList'daki değerlerin gerçekten dizge olduğunu varsayar. Değillerse, her öğenin bir dizeye dönüştürülmesini istediğinizde bize daha fazla bilgi vermeniz gerekir.

2

İlk satırınızın ArrayList resultsObjects = new ArrayList(); olması gerektiği varsayılmıştır. var, seni istediğiniz ArrayList keyfi nesneler varsa

List<string> results = resultsObjects.Cast<string>().ToList(); 

dizelerine dönüştürmek: ArrayList içindeki nesneler belirli bir türdeki ise

, sen Cast<Type> uzatma yöntemini kullanabilirsiniz Bu kullanın:

List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString()) 
                .ToList(); 
0

Sen ArrayList.ToArray() yöntemii kullanarak object[] diziye ArrayList elemanları dönüştürebilirsiniz d.

List<ArrayList> resultsObjects = new List<ArrayList>(); 
resultsObjects.Add(new ArrayList() { 10, "BB", 20 }); 
resultsObjects.Add(new ArrayList() { "PP", "QQ" }); 

var list = (from arList in resultsObjects 
         from sr in arList.ToArray() 
         where sr is string 
         select sr.ToString()).ToList(); 
0

Ayrıca ArrayList öğelerden biri istenen tipine dökümü yapılabilir değilse bir istisna yükseltmek istemediğinize bağlı, LINQ en OfType <> yöntemini kullanabilirsiniz. ArrayList'inizde dizeler olmayan nesneler varsa, OfType() bunları göz ardı eder.

var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m }; 
var strings = oldSchoolArrayList.OfType<string>().ToList(); 
foreach (var s in strings) 
    Console.WriteLine(s); 

Çıktı: [? Net, nasıl bir foreach kullanmadan kesinlikle yazılı jenerik listeye bir ArrayList dönüştürebilirim]

Me 
You 
ait
İlgili konular