Mam tablicę liczb całkowitych w postaci ciągu:
var arr = new string[] { "1", "2", "3", "4" };
Potrzebuję szeregu „prawdziwych” liczb całkowitych, aby dalej:
void Foo(int[] arr) { .. }
Próbowałem rzucić int i oczywiście nie udało się:
Foo(arr.Cast<int>.ToArray());
Mogę teraz zrobić:
var list = new List<int>(arr.Length);
arr.ForEach(i => list.Add(Int32.Parse(i))); // maybe Convert.ToInt32() is better?
Foo(list.ToArray());
lub
var list = new List<int>(arr.Length);
arr.ForEach(i =>
{
int j;
if (Int32.TryParse(i, out j)) // TryParse is faster, yeah
{
list.Add(j);
}
}
Foo(list.ToArray());
ale oba wyglądają brzydko.
Czy istnieją inne sposoby wykonania zadania?
c#
.net
linq
extension-methods
abatishchev
źródło
źródło
Odpowiedzi:
Biorąc pod uwagę tablicę, możesz użyć
Array.ConvertAll
metody :Dzięki Marcowi Gravellowi za wskazanie, że lambda można pominąć, co daje krótszą wersję pokazaną poniżej:
Rozwiązanie LINQ jest podobne, z tym wyjątkiem, że potrzebujesz dodatkowego
ToArray
wywołania, aby uzyskać tablicę:źródło
ConvertAll(arr, int.Parse)
wystarczyArray.ConvertAll(arr, AddressOf Integer.Parse)
EDYCJA: aby przekonwertować na tablicę
To powinno załatwić sprawę:
źródło
Aby uniknąć wyjątków
.Parse
, oto kilka.TryParse
alternatyw.Aby użyć tylko elementów, które można przeanalizować:
lub
Alternatywy
0
dla elementów, których nie można przeanalizować:lub
C # 7.0 :
źródło
var a = Enumerable.Range(0, arr.Length).Where(i => int.TryParse(arr[i], out i)).ToArray();
po prostu zwraca wartości 0,1,2, ... zamiast rzeczywistych wartości. Jakie jest tutaj właściwe rozwiązanie?new int[0]
? Kiedy dostaję SMS, nie dostaję do0
mojej tablicy ...new int[0]
jest pustą tablicą int. Dwa pierwsze przykłady pomijają wartości, których nie można przeanalizować, a dwa ostatnie przykłady używają0
wartości, których nie można przeanalizować.new int[] {0}
. Dzięki.możesz po prostu rzutować tablicę ciągów na tablicę int poprzez:
źródło
Dim converted = arr.Select(addressof Integer.Parse)
Musisz upewnić się, że nie otrzymasz
IEnumerable<int>
zwrotuźródło
źródło