2009-05-15 15 views
14

tamam pes ediyorum, bunu bir satırda nasıl yapıyorsunuz?Nesne [] List <string> C# 3.0 bir satırda nasıl dönüştürülür?

var list = values.Cast<string>().ToList(); 

Hiçbir şey olsun gitmiyorsun: Eğer (.NET 3.5) ve C# 3.0 (uzatma yöntemleri için) mevcuttur LINQ varsa

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    //List<string> fields = values.ToList<string>(); 
    //List<string> fields = values as List<string>; 
    //List<string> fields = (List<string>)values; 

    List<string> fields = new List<string>(); 
    foreach (object value in values) 
    { 
     fields.Add(value.ToString()); 
    } 

    //process the fields here knowning they are strings 
    ... 
} 
+2

Teknik olarak, .NET framework 2.0, 3.0 veya VS2008'de 3.5 hedeflemek için kullanılabilecek C# 3.0. Kafa karıştırıcı, biliyorum – Lucas

+0

doğru, teşekkürler –

cevap

45

C# 3.0 LINQ yüklü mü kullanıyorsunuz? saygı ile değil bir liner <> beyanı Listeye ederken,

List<string> fields = values.Select(i => i.ToString()).ToList(); 
+4

Nesne dizisinin aslında bir dizi dizge olduğunu göremiyorum. Bu cevap doğrudur, çünkü çoğaltır * tam olarak * OP'nin tek linerde ne yazdığını. –

+1

@Andrew: Evet, iyi nokta. Soruyu çok çabuk okudum. Mesajımda şu anda bahsettiğim Caveat. – Noldorin

+0

bağlamdan doğru olarak varsaydığınız gibi, nesneler XAML'den geliyor ve teorik olarak herhangi bir türde olabilir, bu yüzden bir tamsayı gönderdiğimde bu yanıtla, bir dizgiye doğru şekilde dönüştürülür, mükemmel –

16

ardından oldukça güzel bir liner var .NET 2.0/C# 2.0 için gönderdiğiniz şey çok daha kısa.

Uyarı: Sadece senin object[] mutlaka tip string ait olmadığını fark etti. Eğer durum böyleyse, işi iyi yapan Matt Hamilton'un yöntemiyle devam edin. Dizininizin öğesi aslında string türündeyse, yöntemim elbette işe yarayacaktır.

+2

mükemmel cevap - bir linq seçin daha basit. –

+0

Herhangi bir değer bir dize değilse, bunun başarısız olacağını unutmayın. –

+0

@mausch: Evet, cevabı eklemek için cevabı daha yeni düzenledim. – Noldorin

2

Linq gerek duymadan, aynı etkiyi verir: Daha sonra oldukça kolay. Doğru olabilir

List<string> list = new List<string>(); 
Array.ForEach(values, value => list.Add(value.ToString())); 
4

Bir daha varyant:

List<string> list = values.OfType<string>().ToList(); 

Bu ya bir istisna atma veya hepsini dönüştürmek çalışmak yerine, string nesneler değildir orijinal listedeki herhangi bir nesneyi filtreleyecektir.END_ITEMEND_UNORDERED_LIST dizelere

+0

.OfType çok ilginçtir, hatırlayacaktır, fakat bu bağlamda, üç değeri ne olursa olsun göstermeliyim (string, integer, vb.) –

9

C# 2.0:

List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString))); 
3
Array.ConvertAll(inputArray, p => p.ToString()) 

Bu string dizisine object türü bir dizi dönüştürür. Lambda ifadesini değiştirerek diğer tür dizilere dönüştürebilirsiniz.

İlgili konular