C#(配列)について知らない興味深い点

C#言語の興味深い瞬間を説明する記事「C#についておそらく知らなかった8つの事実」の続きで、私は小さなエッセイを提示します。 「キャプテンフッド」などの記事が執筆意欲を低下させると考える人がいるのは残念ですが、それにもかかわらず、コメントには、多くの有用な情報が掲載されている場合があります。

では、要素が見つからない場合、インデックス検索関数は配列で何を返しますか?


配列を返すメソッドがあるとします:
Array GetArray() { return … } 


そして、その中の数字を探すコード:
 Array array = GetArray(); int index = Array.IndexOf(array, 42); if (index != -1) { // do something } 


すべてがおなじみでおなじみですが、ドキュメントを見ると、要素が見つからない場合にIndexOf(Array ...)メソッドが-1ではなく - 1 -1返すことに驚いています。

これから2つの結論が得られます。
1. 0以外で始まる配列を作成できます。
2.上記のコードは正しくありません。

0以外の配列を作成する例:
 Array array = Array.CreateInstance(typeof(int), new int[] { 3 }, new int[] { -1 }); 

この例で 、インデックス付けが-1から始まる3つの要素の配列を作成します。

正しいコードは次のとおりです。
 Array array = GetArray(); int index = Array.IndexOf(array, 42); if (index != (array.GetLowerBound(0) - 1)) { // do something } 


この機能は、インデックス作成が1から始まる.NETプラットフォーム言語用に作成されたと思います。

さらに、ドキュメントでは、下限がint.MinValueである別のケースについて説明しています。 この場合、 IndexOfメソッドは、 int.MinValue - 1 (オーバーフロー)に対応するint.MinValue - 1を返します。

ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J194626/


All Articles