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 ).
.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, codelegate(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:Coś w tym kierunku.
Głosuj za odpowiedzią Glenna, która prawdopodobnie jest poprawnym kodem ;-)
źródło
Możesz użyć:
źródło
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: -
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.
źródło
int
były niejawnie lub jawnie konwertowane nastring
, nie oznacza to, żeList<int>
ma niejawną lub jawną konwersję doList<string>
.Musisz stworzyć nową listę. Podstawowe reprezentacje bitów
List<int>
iList<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 aList<object>
- przenosi Cię to w ekscytujące światy kowariancji i kontrawariancji i nie jest obecnie obsługiwane przez C # ani VB.NET.źródło
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
zamień parametry result i listOfInt na swoje parametry
źródło