2016-07-05 60 views
3

好吧我在一些同事剛剛開始支持的代碼中遇到了這個問題。我從來沒有做過這樣的事情,但不會,但我驚訝於編譯器沒有將其標記爲錯誤。c#數組索引類型檢查

基本上,你可以看到「奇怪」行爲與這個小片段:

array[3/4] = 3;

這是允許的,即使3/4,我會想,會返回一個雙。 如果將其更改爲:

array[3.0/4] = 3;

你得到一個編譯錯誤。

我假設第一個不創建編譯器錯誤,因爲它做整數除法並返回一個整數。

+0

我希望你改變這段代碼。 (我假設原始代碼使用的是變量,而不是硬編碼的3/4。)這是對bug的邀請。我希望我能看不到它。 – Eli

+0

原來的代碼實際上是這個數組[變量* 3/4],它確實做了所需的事情,但我不喜歡它,並且從來沒有將它編碼過。 –

回答

5

是的,如果兩個部分都是整數 - 編譯器執行整數除法。 你得到

3/4 = 0 

當試圖通過一個整數除以雙 - 你得到一個double結果,這不是數組的有效指標。

+3

你可以很容易地用這個'(3/4).GetType()'來驗證,這將是'System.Int32'。 –