2016-07-05 22 views
3

私はこれをいくつかのコードで見つけました。同僚がすぐにサポートし始めました。私はこのようなことは一度もしていませんでしたが、コンパイラがエラーとしてフラグを立てなかったことに驚きました。 c#配列インデックスの型チェック

は、基本的には、この小さなスニペットで「奇妙な」行動を見ることができます:

array[3/4] = 3;

これも3/4かかわらず、私が思うだろう許可され、ダブルを返します。 あなたはそれを変更する場合:

array[3.0/4] = 3;

あなたはコンパイラエラーを取得しません。

私は、整数除算を行い整数を返すため、最初のコンパイルエラーは発生しないと仮定しています。

+0

このコードを変更していただければ幸いです。 (元のコードは変数を使用しており、ハードコーディングされた3/4ではないと仮定しています)。これはバグの招待です。私はそれを見抜くことができたらいいと思う。 – Eli

+0

オリジナルのコードは実際にはこの配列[変数* 3/4]でしたが、必要なことはしましたが、私はそれを気に入らず、決して自分自身でそれをコード化したことはありませんでした。 –

答えて

5

はい、両方の部分が整数の場合、コンパイラは整数除算を実行します。あなたは整数で、二重分割しようとすると あなたは

3/4 = 0 

を得る - あなたは、配列の有効なインデックスではありません、二重結果を取得します。

+3

この '(3/4).GetType()'で簡単に確認できます。これは 'System.Int32'です。 –

関連する問題