[C#] 為什麼我可以通過1作為一個簡短的,但不是我的int變量?


Answers

由於可能的截斷, int沒有隱式轉換。 但是, 常量表達式可以被編譯器視為目標類型。

1 ? 不是一個問題:它顯然是一個有效的short價值。 i ? 不是那麼多 - 它可能是一些值> short.MaxValue ,例如,編譯器無法檢查一般情況下。

Question

為什麼第一次和第二次寫入工作,但不是最後一次? 有沒有辦法我可以允許他們所有3個,並檢測是否是1,(int)1或我通過了? 真的,為什麼只有最後一個允許? 第二個被允許但不是最後一個真的打動了我的想法。

演示顯示編譯錯誤

using System;
class Program
{
    public static void Write(short v) { }
    static void Main(string[] args)
    {
        Write(1);//ok
        Write((int)1);//ok
        int i=1;
        Write(i);//error!?
    }
}



編譯器告訴你為什麼代碼失敗:

cannot convert `int' expression to type `short'

所以這裡是你應該問的問題:為什麼這種轉換失敗? 我搜索了“c#convert int short”,最後在MS C#頁面輸入了short關鍵字:

http://msdn.microsoft.com/en-us/library/ybs77ex4(v=vs.71).aspx

正如這個頁面所說的,從較大數據類型到short隱式轉換只允許用於文字。 編譯器可以知道文字何時超出範圍,但不是這樣,所以需要確保您避免了程序邏輯中的超出範圍錯誤。 這個保證是由演員提供的。

Write((short)i)



我相信這是因為你在前兩個字符中傳入了一個常量,但在第三個字符中傳入一個整數時沒有自動類型轉換。

編輯:有人打敗了我!