web-dev-qa-db-ja.com

配列のインデックスは存在しますか

職場で悪臭を放つコードを継承しました。私は可能な限り最も痛みのない解決策を見つけたいと思っています。

任意の数が配列内の有効な要素であるかどうかを確認する方法はありますか?

例-array [25]が存在するかどうかを確認する必要があります。

できれば、配列を介してforeach()を実行せずに行を見つけることをお勧めします。

これを行う方法はありますか、またはforeachループで立ち往生していますか?

73
splatto

長さをテストする

int index = 25;
if(index < array.Length)
{
    //it exists
}
128
Eoin Campbell

LINQを使用してそれも実現できます。

var exists = array.ElementAtOrDefault(index) != null;
74
Shimmy

「有効な要素」とはどういう意味ですか?あなたはただすることができます:

if (array.Length >= 26)

これにより、25が配列への有効なインデックスであるかどうかがわかります(下限が0であると仮定)。

Nullでないかどうかを知る必要がある場合は、次を使用します。

if (array[25] != null)

(または、2つの組み合わせ)。

これらが役に立たない場合は、問題の「有効」のより正確な意味を教えてください。

17
Jon Skeet

アイテムがnullではないかどうかも確認したいとします

if (array.Length > 25 && array[25] != null)
{
    //it exists
}
10
Martin Harris
// 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
}
2
theJerm

配列の長さを使用して、任意の数がその範囲に収まるかどうかを確認できます。たとえば、サイズ10の配列がある場合、25は10以上であるため、array [25]は無効です。

1
jean

むしろリストを使用して、存在を確認できます。

List<int> l = new List<int>();
l.Add(45);
...
...

if (l.Count == 25) {
  doStuff();
}
int num = 45;
if (l.Contains(num)) {
  doMoreStuff();
}

array.lengthは、配列に含まれる要素の数を示します

1
Mike Miller

配列を使用してさまざまなフィールドを格納しているように思えます。これは間違いなくコードの匂いです。配列は一般に高レベルのコードには適していない(または必要ない)ので、できるだけ配列を使用しないでください。

簡単な辞書への切り替えは、短期的には実行可能なオプションかもしれません。大きなプロパティバッグクラスを使用する場合と同様。多くのオプションがあります。あなたが今抱えている問題は、悪いデザインの単なる症状です。悪いデザインにパッチを当てるのではなく、根本的な問題を修正することを検討してください。

0
Wedge

インデックスが配列の長さよりも小さいかどうかを確認できます。これは、インデックスに値を割り当てることはできても明示的に値が与えられていないヌルやその他の奇妙なケースをチェックしません。

0
JB King

配列の長さをチェックして、項目25が配列内にあるという意味で有効かどうかを確認できます。

if (array.Length > 25)
{ 
   if (array[25] != null)
   {
       //good
   }
}

配列項目自体が設定されているかどうかを確認します。

0
Colin Desmond