當創建一個SqlParameter
(.NET3.5)或OdbcParameter
時,我經常使用SqlParameter(string parameterName, Object value)
構造函數重載來設置一個語句中的值。SqlParameter構造函數編譯器超載選擇
但是,當我嘗試傳遞一個0作爲值參數時,我最初被C#編譯器選中(string, OdbcType)
過載而不是(string, Object)
。
MSDN實際上在remarks section中對此遺漏提出了警告,但解釋讓我感到困惑。
爲什麼C#編譯器決定應將文字0參數轉換爲OdbcType
而不是Object
?該警告還表示使用Convert.ToInt32(0)
來強制使用Object
過載。
它令人困惑地說,這將0轉換爲「對象類型」。但不是0已經是「對象類型」?該頁面的Types of Literal Values部分似乎認爲文字總是鍵入的,因此從System.Object
繼承。
這種行爲似乎並不直觀。這可能與反方差或共方差有關嗎?
謝謝,非常清楚的解釋。 – Ash 2010-06-15 01:06:54