Saya memiliki array bilangan bulat dalam bentuk string:
var arr = new string[] { "1", "2", "3", "4" };
Saya perlu array bilangan bulat 'nyata' untuk mendorongnya lebih jauh:
void Foo(int[] arr) { .. }
Saya mencoba untuk menggunakan int dan tentu saja gagal:
Foo(arr.Cast<int>.ToArray());
Saya bisa lakukan selanjutnya:
var list = new List<int>(arr.Length);
arr.ForEach(i => list.Add(Int32.Parse(i))); // maybe Convert.ToInt32() is better?
Foo(list.ToArray());
atau
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());
tapi keduanya terlihat jelek.
Apakah ada cara lain untuk menyelesaikan tugas?
c#
.net
linq
extension-methods
abatishchev
sumber
sumber
Jawaban:
Diberikan array, Anda dapat menggunakan
Array.ConvertAll
metode ini :Terima kasih kepada Marc Gravell karena telah menunjukkan bahwa lambda dapat dihilangkan, menghasilkan versi yang lebih pendek seperti di bawah ini:
Solusi LINQ serupa, kecuali Anda perlu
ToArray
panggilan ekstra untuk mendapatkan array:sumber
ConvertAll(arr, int.Parse)
sudah cukupArray.ConvertAll(arr, AddressOf Integer.Parse)
EDIT: untuk mengkonversi ke array
Ini harus melakukan trik:
sumber
Untuk menghindari pengecualian dengan
.Parse
, berikut adalah beberapa.TryParse
alternatif.Untuk hanya menggunakan elemen yang dapat diuraikan:
atau
Alternatif yang digunakan
0
untuk elemen yang tidak dapat diuraikan:atau
C # 7.0 :
sumber
var a = Enumerable.Range(0, arr.Length).Where(i => int.TryParse(arr[i], out i)).ToArray();
hanya mengembalikan indeces 0,1,2, ... bukannya nilai riil. Apa solusi yang tepat di sini?new int[0]
? Ketika saya memiliki teks, saya tidak mendapatkan0
dalam array saya ...new int[0]
adalah array int kosong. Dua contoh pertama melewatkan nilai yang tidak dapat diuraikan, dan dua contoh terakhir digunakan0
untuk nilai yang tidak dapat diuraikan.new int[] {0}
. Terima kasih.Anda cukup melemparkan array string ke array int dengan:
sumber
Dim converted = arr.Select(addressof Integer.Parse)
Harus memastikan Anda tidak mendapatkan
IEnumerable<int>
pengembaliansumber
sumber