我有這樣一些代碼:爲什麼不能將值隱式轉換爲C#中的字符串?
int value = 5;
MessageBox.Show (value);
和MessageBox.Show
笙歌說:
「不能從 '詮釋' 轉換爲 '串'」
我似乎記得有些情況下值似乎被隱式轉換爲字符串值,但無法準確回憶它們。
這個決定背後的原因是什麼原因,任何值都不能隱式轉換爲字符串值?
我有這樣一些代碼:爲什麼不能將值隱式轉換爲C#中的字符串?
int value = 5;
MessageBox.Show (value);
和MessageBox.Show
笙歌說:
「不能從 '詮釋' 轉換爲 '串'」
我似乎記得有些情況下值似乎被隱式轉換爲字符串值,但無法準確回憶它們。
這個決定背後的原因是什麼原因,任何值都不能隱式轉換爲字符串值?
MessageBox.Show()
只接受一個字符串。當你使用類似Debug.WriteLine
的東西時,它接受一堆不同的對象類型,包括object
,然後在該對象上調用ToString()
。這可能是你正在經歷的。
+1 3個獨角獸!是啊! – hunter 2011-04-01 17:09:28
謝謝,這是有道理的。 – 2011-04-01 17:11:40
出於確切原因,您將不得不要求C#編譯器人員或.NET運行時人員之一。
但是,.NET框架或C#語言中沒有地方可以自動地將值自動隱式地轉換爲字符串。
但是,您可能會想到字符串連接的工作方式,但這隻適用於string.Concat
方法中包含大量重載的方法,其中包括採用對象的方法。
換句話說,這是允許的:
string s = "Hello there: " + 4;
其他方法周圍的框架也有很多重載,如的Debug.WriteLine和這樣的,它會很容易地接受你的整數或小數,轉換它通過調用.ToString將其轉換爲字符串,然後將其打印出來。
但是,它並不是構建到字符串或整型,而是方法本身。
您好,請留下評論,告訴我有什麼不對,以便我有機會糾正錯誤,並從錯誤中吸取教訓。 – 2011-04-01 17:13:29
短溶液(無處不在,你需要一個字符串):
MessageBox.Show(""+value);
但我寧願ToString()
或在大多數情況下String.Format()
。
要回答「Why」部分:因爲impicit轉換可能是危險的,可能會破壞類型安全性。
"1" + 2 = "12"
,並不總是你想要的/期望的。
Henk好點,我不知道隱式轉換的缺點。 – 2011-04-01 17:13:40
@Joan:如果您熟悉JavaScript處理字符串的方式(或者至少看到它足夠了),您會明白,大多數語言不會執行太多的隱式轉換。 :)看看[這](http://stackoverflow.com/questions/1995113/strangest-language-feature/1995298#1995298)和所有其他JavaScript相關的答案。 – 2011-04-02 07:46:23
嘗試
MessageBox.Show(value.ToString());
可以使用的String.Format()函數類似
MassageBox.Show(StringFormat("{0}",value));
如果您需要了解的String.Format更多幫助,請參閱: String.Format in C# not returning modified int value
的可能的複製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
這是關於丟失隱式轉換的問題,或者關於調用Messagebox.Show一個整數? – 2011-04-07 18:28:06
隱式轉換。 – 2011-04-07 18:32:01