Преобразование List <int> в List <string> в .NET 2.0

Можете как-нибудь закинуть List<int> на List<string>?

Я знаю, что могу перебрать и .ToString (), но приведение было бы круто.

Я использую C# 2.0 (так что нет LINQ).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
97
0
82 936
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Может ли 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.

@Curt: > It is theoretically possible to treat > a List<string> as a List<object> -- > this gets you into the exciting worlds > of covariance and contravariance, and > is not currently supported by C# or > VB.NET C# and .NET does actually support Covariance. Just not with generics.
Christian Hagelid 05.09.2008 03:57

Вы не сможете напрямую преобразовать его, поскольку явного или неявного преобразования типа 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>.

Adam Robinson 22.01.2010 23:29
Ответ принят как подходящий

В .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());

Спасибо! Это сэкономило мне массу времени

Steve French 25.10.2010 23:52

Нет, лямбды были введены в C# 3.0, поэтому в 2.0 это не будет работать.

Luke 28.02.2012 21:08

Я обнаружил, что он работает с VS2008 и .NET 2.0, если у вас установлен хотя бы .NET 3.0. см. stackoverflow.com/questions/3341846/…

igelineau 15.10.2014 18:26

Люди должны различать версию .NET и версию C#. Поскольку стрелка x => x.ToString() скомпилирована для того же типа IL, что и delegate(int x) { return x.ToString(); }, в этом случае важно иметь компилятор C# (версия C#), который знает, что такое =>. Платформа и среда выполнения (версия .NET) не нуждаются в специальных функциях для этого, поэтому .NET 2.0 здесь подойдет.

Jeppe Stig Nielsen 13.02.2015 23:38

Оказывается, вы можете отказаться от <string>, и он все еще работает. Делаем это просто l1.ConvertAll(x => x.ToString());

ᴍᴀᴛᴛ ʙᴀᴋᴇʀ 06.10.2016 18:07

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

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 ();

Sharunas Bielskis 09.04.2019 11:36

Преобразование из списка int в список строк может быть выполнено двумя дополнительными способами помимо обычного ToString (). Выберите тот, который вам больше нравится.

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

Или также:

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

И, наконец, традиционные:

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

Другие вопросы по теме