Saya mewarisi beberapa kode di tempat kerja yang baunya sangat buruk. Saya berharap menemukan solusi yang paling mudah.
Apakah ada cara untuk memeriksa apakah beberapa bilangan arbitrer adalah elemen yang valid dalam sebuah array?
Contoh - Saya perlu memeriksa apakah array [25] ada.
Lebih disukai saya lebih suka melakukan ini tanpa melakukan foreach () melalui array untuk menemukan baris.
Apakah ada cara untuk melakukan ini, atau apakah saya terjebak dengan foreach loop?
Jawaban:
Uji panjangnya
int index = 25; if(index < array.Length) { //it exists }
sumber
Anda juga dapat menggunakan LINQ untuk mencapainya:
var exists = array.ElementAtOrDefault(index) != null;
sumber
new object[]{ null }.ElementAtOrDefault(index)
akan kembalinull
karena elemen pada 0 adalahnull
. MenggunakanElementAtOrDefault
bukanlah solusi yang bagus untuk memeriksa indeks array yang ada , bahwa pemeriksaan kesetaraan yang ditambahkan di bagian akhir membuat hasil tidak dapat ditentukan.array.Length > index
.Apa sebenarnya yang Anda maksud dengan "adalah elemen yang valid"? Anda bisa melakukan:
if (array.Length >= 26)
yang akan memberi tahu Anda apakah 25 adalah indeks yang valid ke dalam array atau tidak (dengan asumsi batas bawah 0).
Jika Anda perlu tahu apakah itu bukan null atau tidak, gunakan saja:
if (array[25] != null)
(atau kombinasi keduanya).
Jika ini tidak membantu, berikan pengertian yang lebih tepat tentang "valid" untuk masalah Anda.
sumber
Index was outside the bounds of the array
Dengan asumsi Anda juga ingin memeriksa apakah item tersebut bukan null
if (array.Length > 25 && array[25] != null) { //it exists }
sumber
&&
dalamif (array.Length > 25 && array[25] != null)
, jika menggunakan tunggal&
akan memunculkan pengecualian IndexOutOfRange. MSDN .// I'd modify this slightly to be more resilient to a bad parameter // it will handle your case and better handle other cases given to it: int index = 25; if (index >= 0 && index < array.Length) { // Array element found }
sumber
Anda dapat menggunakan panjang larik, dan melihat apakah angka arbitrer Anda cocok dengan rentang itu. Misalnya, jika Anda memiliki larik berukuran 10, larik [25] tidak valid karena 25 tidak kurang dari 10.
sumber
Anda lebih baik menggunakan Daftar, sehingga Anda dapat memeriksa keberadaannya.
List<int> l = new List<int>(); l.Add(45); ... ... if (l.Count == 25) { doStuff(); } int num = 45; if (l.Contains(num)) { doMoreStuff(); }
sumber
array.length
akan memberi tahu Anda berapa banyak elemen dalam sebuah arraysumber
Anda dapat memeriksa apakah indeks lebih kecil dari panjang array. Ini tidak memeriksa null atau kasus ganjil lainnya di mana indeks dapat diberi nilai tetapi belum diberikan secara eksplisit.
sumber
Anda dapat memeriksa panjang array untuk melihat apakah item 25 valid dalam artian berada di dalam array, maka Anda dapat menggunakan
if (array.Length > 25) { if (array[25] != null) { //good } }
untuk melihat apakah item array itu sendiri telah disetel.
sumber
Kedengarannya seperti Anda menggunakan array untuk menyimpan bidang yang berbeda. Ini pasti bau kode. Saya akan menghindari penggunaan array sebanyak mungkin karena mereka umumnya tidak cocok (atau dibutuhkan) dalam kode tingkat tinggi.
Beralih ke Kamus sederhana mungkin merupakan opsi yang bisa diterapkan dalam jangka pendek. Seperti halnya menggunakan tas sekelas property besar. Ada banyak pilihan. Masalah yang Anda hadapi sekarang hanyalah gejala dari desain yang buruk, Anda harus melihat memperbaiki masalah yang mendasarinya daripada hanya menambal desain yang buruk sehingga agak, sebagian besar berfungsi, untuk saat ini.
sumber