.NET 2.0'da List <int> 'i List <string>' e yayınla


97

Bir döküm Can List<int>için List<string>nasılsa?

Dönüp .ToString () yapabileceğimi biliyorum, ama oyuncu kadrosu harika olurdu.

C # 2.0'deyim (yani LINQ yok ).

Yanıtlar:


151

.NET 2.0, ConvertAllbir dönüştürücü işlevini geçirebileceğiniz bir yönteme sahiptir :

List<int>    l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });

117

2010 için güncellendi

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());

6
Teşekkürler! Bu bana çok zaman kazandırdı
Steve French

2
Hayır, lambdalar C # 3.0'da tanıtıldı, bu nedenle bu 2.0'da çalışmayacak.
Luke

En az .NET 3.0 kurulu olduğu sürece, VS2008 ve .NET 2.0 ile çalıştığını buldum. stackoverflow.com/questions/3341846/…
igelineau

1
İnsanlar .NET sürümü ile C # sürümü arasında ayrım yapmalıdır. Ok x => x.ToString(), delegate(int x) { return x.ToString(); }bu durumda olduğu gibi aynı tür IL'ye derlendiğinden , önemli olan, ne olduğunu bilen bir C # derleyicisine (C # sürümü) sahip olmaktır =>. Çerçeve ve çalışma zamanı (.NET sürümü) bunun için özel bir özelliğe ihtiyaç duymaz, bu nedenle .NET 2.0 burada iyidir.
Jeppe Stig Nielsen

Çıkabilirsin <string>ve hala çalışıyor. Sadece yapıyorl1.ConvertAll(x => x.ToString());
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

8

C # 2.0 yapabilir List<T>.Convertmi? Öyleyse, en iyi tahmininiz bunu bir temsilciyle kullanmak olacaktır:

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });

Bu çizgide bir şey.


Glenn'in cevabına olumlu oy verin, bu muhtemelen doğru koddur ;-)


6

Kullanabilirsiniz:

List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();

5

Hiçbir açık veya örtülü döküm dizeye int den var olduğu doğrudan dökmeyi Bunu olur, mümkün olmaz sahip gibi .ToString () kapsayan bir yöntem olması: -

foreach (int i in intList) stringList.Add(i.ToString());

Edit - ya da diğerlerinin oldukça zekice belirttiği gibi, intList.ConvertAll (delegate (int i) {return i.ToString ();}) kullanın; ancak yine de açıkça .ToString () kullanmanız gerekir ve bu, bir döküm.


3
Jenerik tipler arasında bir alçı varlığının, projeksiyon arasında geçiş yapma yeteneği ile hiçbir ilgisi yoktur. IE, olsa bile intörtük veya açık dönüştürülebilir olduğunu için string, bu anlamına gelmez List<int>bir örtülü veya açık dönüştürme vardır List<string>.
Adam Robinson

1

Yeni bir liste oluşturmanız gerekiyor. Temeldeki bit temsilleri List<int>ve List<string>tamamen uyumsuz - örneğin 64 bitlik bir platformda, bireysel üyeler aynı boyutta bile değildir.

A List<string>olarak ele almak teorik olarak mümkündür List<object>- bu sizi heyecan verici kovaryans ve kontravarans dünyalarına götürür ve şu anda C # veya VB.NET tarafından desteklenmemektedir.


@Curt :>> Bir Listeyi <string> 'i bir Liste <nesne> olarak ele almak teorik olarak mümkündür -> bu sizi heyecan verici kovaryans ve kontravarans dünyalarına> götürür ve> şu anda C # veya> VB tarafından desteklenmemektedir. NET C # ve .NET aslında Kovaryansı destekler. Sadece jeneriklerle değil.
Christian Hagelid

1

result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()

sonucunu ve listOfInt parametrelerini kendi parametrelerinizle değiştirin


Benim için doğru çalıştı sonuç = listOfInt.Select (i => i.ToString ()). ToList ();
Sharunas Bielskis

0

İnt List'den string List'e dönüştürme, olağan ToString () 'in yanı sıra iki ek yolla yapılabilir. Sizi daha çok memnun eden birini seçin.

var stringlist = intlist.Select(x=>""+x).ToList();

Veya ayrıca:

var stringlist = intlist.Select(x=>$"{x}").ToList();

Ve nihayet geleneksel:

var stringlist = intlist.Select(x=>x.ToString()).ToList();
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.