




Может ли 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(); });
Что-то в этом роде.
Проголосуйте за ответ Гленна, который, вероятно, является правильным кодом ;-)
Вы должны составить новый список. Базовые битовые представления List<int> и List<string> полностью несовместимы - например, на 64-битной платформе отдельные элементы даже не одного размера.
Теоретически можно рассматривать List<string> как List<object> - это вводит вас в захватывающие миры ковариации и контравариантности и в настоящее время не поддерживается C# или VB.NET.
Вы не сможете напрямую преобразовать его, поскольку явного или неявного преобразования типа int в строку не существует, имеют будет методом, включающим .ToString (), например: -
foreach (int i in intList) stringList.Add(i.ToString());
Редактировать - или, как другие довольно блестяще указывали, используйте intList.ConvertAll (delegate (int i) {return i.ToString ();});, однако очевидно, что вам все равно придется использовать .ToString (), и это преобразование, а не в ролях.
Существование приведения между универсальными типами не имеет ничего общего с возможностью приведения между проекциями. IE, даже если int был явно или неявно преобразован в string, это не означает, что List<int> имеет неявное или явное преобразование в List<string>.
В .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(); });
Обновлено на 2010 год
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
Спасибо! Это сэкономило мне массу времени
Нет, лямбды были введены в C# 3.0, поэтому в 2.0 это не будет работать.
Я обнаружил, что он работает с VS2008 и .NET 2.0, если у вас установлен хотя бы .NET 3.0. см. stackoverflow.com/questions/3341846/…
Люди должны различать версию .NET и версию C#. Поскольку стрелка x => x.ToString() скомпилирована для того же типа IL, что и delegate(int x) { return x.ToString(); }, в этом случае важно иметь компилятор C# (версия C#), который знает, что такое =>. Платформа и среда выполнения (версия .NET) не нуждаются в специальных функциях для этого, поэтому .NET 2.0 здесь подойдет.
Оказывается, вы можете отказаться от <string>, и он все еще работает. Делаем это просто l1.ConvertAll(x => x.ToString());
Вы можете использовать:
List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
замените параметры result и listOfInt на свои параметры
У меня корректно сработал result = listOfInt.Select (i => i.ToString ()). ToList ();
Преобразование из списка int в список строк может быть выполнено двумя дополнительными способами помимо обычного ToString (). Выберите тот, который вам больше нравится.
var stringlist = intlist.Select(x=>""+x).ToList();
Или также:
var stringlist = intlist.Select(x=>$"{x}").ToList();
И, наконец, традиционные:
var stringlist = intlist.Select(x=>x.ToString()).ToList();