2008-09-04 14 views

ответ

137

.NET 2.0 имеет метод ConvertAll где вы можете передать в функцию преобразователя:

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

удивительный, спасибо. после нескольких часов болезненных поисков я пришел сюда! и работал как шарм! : D – iamserious 2010-07-15 10:33:00

+1

Я согласен. Спасибо, что поделился! – Junto 2011-01-13 17:04:02

8

Is C# 2.0 в состоянии сделать List<T>.Convert? Если это так, я думаю, вам лучше было бы предположить, чтобы использовать это с делегатом:

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

Что-то вдоль этих линий.


ответ Upvote Гленна, который, вероятно, правильный код ;-)

1

Вы должны построить новый список. Базовые представления бит List<int> и List<string> полностью несовместимы - например, на 64-битной платформе отдельные элементы не имеют одинакового размера.

Теоретически можно рассматривать List<string> как List<object> - это дает вам захватывающие миры ковариации и контравариантности и в настоящее время не поддерживается C# или VB.NET.

+0

[@Curt] (http://stackoverflow.com/questions/44942/cast-listint-to-liststring#44950):> Теоретически можно обрабатывать > список как список - > это получает вас в захватывающие миры > ковариации и контрвариации и > в настоящее время не поддерживается C# или > VB.NET C# и .NET на самом деле поддерживает ковариации. Просто не с дженериками. – 2008-09-04 23:57:45

3

Вы не могли бы непосредственно бросьте, как не явно или неявно гипса существует из INT в строку, она будет иметь быть методом, включающий .ToString(), такие как: -

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

Редактировать - или как другие отметили довольно блестяще, используйте intList.ConvertAll (delegate (int i) {return i.ToString();}) ;, однако, очевидно, вам все равно придется использовать .ToString(), и это преобразование, а не бросок.

+3

Существование броска между родовыми типами не имеет ничего общего с способностью броска между проекцией.IE, даже если `int` неявно или явно конвертируется в` string`, это не означает, что `List ` имеет неявное или явное преобразование в `List `. – 2010-01-22 20:29:03

99

обновлялись 2010

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

Вы можете использовать:

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

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

замените результат параметров и listOfInt на ваши параметры