Czy możesz jakoś rzucić List<int>
na List<string>
?
Wiem, że mógłbym przelecieć i .ToString () to coś, ale obsada byłaby niesamowita.
Jestem w C # 2.0 (więc nie ma LINQ ).
Odpowiedzi:
.NET 2.0 ma ConvertAll
metodę, w której można przekazać funkcję konwertera:
List<int> l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
Zaktualizowano na rok 2010
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
x => x.ToString()
jest kompilowana do tego samego rodzaju IL, co delegate(int x) { return x.ToString(); }
w tym przypadku, ważne jest, aby mieć kompilator C # (wersja C #), który wie, co =>
to jest. Framework i środowisko wykonawcze (wersja .NET) nie wymagają do tego żadnych specjalnych funkcji, więc .NET 2.0 jest tutaj w porządku.
<string>
i nadal działa. Po prostul1.ConvertAll(x => x.ToString());
Czy C # 2.0 jest w stanie to zrobić List<T>.Convert
? Jeśli tak, myślę, że najlepiej przypuszczać, że użyjesz tego z delegatem:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });
Coś w tym kierunku.
Głosuj za odpowiedzią Glenna, która prawdopodobnie jest poprawnym kodem ;-)
Możesz użyć:
List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
Nie będzie w stanie bezpośrednio rzucić go jako nie istnieje wyraźna lub dorozumiana odlewane z int na ciąg, to mają być Metoda polegająca .ToString () takich jak: -
foreach (int i in intList) stringList.Add(i.ToString());
Edytuj - lub, jak inni zauważyli dość genialnie, użyj intList.ConvertAll (delegate (int i) {return i.ToString ();});, jednak wyraźnie nadal musisz używać .ToString () i jest to konwersja zamiast Obsada.
int
były niejawnie lub jawnie konwertowane na string
, nie oznacza to, że List<int>
ma niejawną lub jawną konwersję do List<string>
.
Musisz stworzyć nową listę. Podstawowe reprezentacje bitów List<int>
i List<string>
są całkowicie niezgodne - na przykład na platformie 64-bitowej poszczególne elementy członkowskie nie są nawet tego samego rozmiaru.
Teoretycznie możliwe jest traktowanie a List<string>
jako a List<object>
- przenosi Cię to w ekscytujące światy kowariancji i kontrawariancji i nie jest obecnie obsługiwane przez C # ani VB.NET.
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
zamień parametry result i listOfInt na swoje parametry