2016-07-05 10 views
3

Okay, ich bin in einem Code auf diesen Code gestoßen, den ein Mitarbeiter gerade angefangen hat zu unterstützen. Ich habe noch nie so etwas getan und würde es nicht tun, aber ich war erstaunt, dass der Compiler es nicht als Fehler markiert hat.C# array index type checking

Grundsätzlich können Sie die „seltsame“ Verhalten mit diesem kleinen Schnipsel sehen:

array[3/4] = 3;

Dies obwohl 3/4 erlaubt ist, glaube ich, würde eine doppelte zurückzukehren. Wenn Sie es ändern:

array[3.0/4] = 3;

Sie tun einen Compiler-Fehler erhalten.

Ich nehme an, die erste erstellt keinen Compiler-Fehler, weil es Integer-Division und gibt eine ganze Zahl zurück.

+0

Ich hoffe, Sie ändern diesen Code. (Ich nehme an, der ursprüngliche Code verwendet Variablen und nicht hart-codiert 3/4.) Dies ist eine Einladung für Fehler. Ich wünschte, ich könnte es aufheben. – Eli

+0

Der ursprüngliche Code war eigentlich dieses Array [Variable * 3/4] und es hat getan, was erforderlich war, aber ich mag es nicht und hätte es nie auf diese Weise selbst codiert. –

Antwort

5

Ja, wenn beide Teile Integer sind - der Compiler führt eine ganzzahlige Division durch. Sie erhalten

3/4 = 0 

Wenn Sie versuchen, mit einer ganzen Zahl doppelt zu teilen - Sie ein Doppel Ergebnis zu erhalten, die kein gültiger Index des Arrays ist.

+3

Sie können leicht mit dieser '(3/4) .GetType()', die 'System.Int32' sein wird, überprüfen. –