2011-04-01 58 views
9

我有這樣一些代碼:爲什麼不能將值隱式轉換爲C#中的字符串?

int value = 5; 
MessageBox.Show (value); 

MessageBox.Show笙歌說:

「不能從 '詮釋' 轉換爲 '串'」

我似乎記得有些情況下值似乎被隱式轉換爲字符串值,但無法準確回憶它們。

這個決定背後的原因是什麼原因,任何值都不能隱式轉換爲字符串值?

+0

的可能的複製HTTP ://堆棧溢出。com/questions/751303/can not-implicitly-convert-type-x-to-string-when-and-how-it-it-it-it – rsenna 2011-04-01 17:08:54

+0

這是關於丟失隱式轉換的問題,或者關於調用Messagebox.Show一個整數? – 2011-04-07 18:28:06

+0

隱式轉換。 – 2011-04-07 18:32:01

回答

18

MessageBox.Show()只接受一個字符串。當你使用類似Debug.WriteLine的東西時,它接受一堆不同的對象類型,包括object,然後在該對象上調用ToString()。這可能是你正在經歷的。

+0

+1 3個獨角獸!是啊! – hunter 2011-04-01 17:09:28

+0

謝謝,這是有道理的。 – 2011-04-01 17:11:40

2

出於確切原因,您將不得不要求C#編譯器人員或.NET運行時人員之一。

但是,.NET框架或C#語言中沒有地方可以自動地將值自動隱式地轉換爲字符串。

但是,您可能會想到字符串連接的工作方式,但這隻適用於string.Concat方法中包含大量重載的方法,其中包括採用對象的方法。

換句話說,這是允許的:

string s = "Hello there: " + 4; 

其他方法周圍的框架也有很多重載,如的Debug.WriteLine和這樣的,它會很容易地接受你的整數或小數,轉換它通過調用.ToString將其轉換爲字符串,然後將其打印出來。

但是,它並不是構建到字符串或整型,而是方法本身。

+0

您好,請留下評論,告訴我有什麼不對,以便我有機會糾正錯誤,並從錯誤中吸取教訓。 – 2011-04-01 17:13:29

10

短溶液(無處不在,你需要一個字符串):

MessageBox.Show(""+value); 

但我寧願ToString()或在大多數情況下String.Format()

要回答「Why」部分:因爲impicit轉換可能是危險的,可能會破壞類型安全性。
"1" + 2 = "12",並不總是你想要的/期望的。

+0

Henk好點,我不知道隱式轉換的缺點。 – 2011-04-01 17:13:40

+0

@Joan:如果您熟悉JavaScript處理字符串的方式(或者至少看到它足夠了),您會明白,大多數語言不會執行太多的隱式轉換。 :)看看[這](http://stackoverflow.com/questions/1995113/strangest-language-feature/1995298#1995298)和所有其他JavaScript相關的答案。 – 2011-04-02 07:46:23

-1

嘗試

MessageBox.Show(value.ToString()); 
相關問題