2011-05-24 63 views
3

我與我的隊友就此進行了簡短的討論。他說,如果我在文本框中輸入數字,然後嘗試使用textbox.text或val(textbox.text)後面的值,則不需要將該值解析爲整數。據他介紹,如果文本屬性值是全部數字,你可以直接獲取整數值,而不是字符串。文本框是否將全部數字文本保存爲長整型或字符串?

因此,如果我有textBox1.Text = "12345",那麼下一次,如果我使用intABC = textBox1.Text,它不會拋出錯誤。這樣對嗎? C#或其他.Net語言是否執行這種隱式轉換?另外,將代碼存儲爲"12345"作爲字符串還是整數?這個值需要多少內存,5個字節的5個字節或一個整數的2個字節?

+6

你可以試試看:-) – MBen 2011-05-24 09:59:46

回答

14

TextBox.Text保持文本爲一個簡單的字符串,它並不關心字符串的真正「含義」。然後,如果你想讓你的數字回來,你需要解析字符串,因此既不允許隱式轉換也不允許顯式轉換爲int(或者更好的辦法是,如果你這樣做,它會拋出一個異常......)。

關於大小,該文本存儲爲UNICODE(UTF-16)字符串,因此每個字符的字符數爲2到4個字節(取決於字符)。

int numBytes = Encoding.Unicode.GetByteCount(stringToMeasure); 

要查找的字符串,Unicode和編碼的詳細信息:使用下面的代碼

您可以輕鬆地測量尺寸(字符串的只是大小,而造成的開銷參考尺寸等)看看here,herehere

+1

因此,在這種情況下,它仍然需要5bytes的內存空間,並將該值存儲爲字符串。那麼,結果是有人欠我一杯啤酒! :) – jitendragarg 2011-05-24 10:05:08

+0

@jitendra garg:肯定你贏了啤酒,但不確定字符串的大小,使用'int numBytes = Encoding.Unicode.GetByteCount(stringToMeasure)'來衡量實際大小(實際上是「12345 「是10個字節,而不是5個)。 – digEmAll 2011-05-24 10:25:02

+1

@jitendra,@digEmAll:別忘了'string'對象也會有額外的開銷。 (我不記得具體到底有多少,但我認爲它大概是每個字節2字節的20個字節。) – LukeH 2011-05-24 10:52:07

2

如果你知道你將只使用數值,請嘗試使用NumericUpDown control
然後,您可以通過使用Value屬性來獲取/設置數值(十進制)。

的NumericUpDown控制包含可以通過點擊控制的向上或向下按鈕增加或減小的單個數值。用戶也可以輸入一個值,除非ReadOnly屬性設置爲true。

2

至於你的其他語言的問題;如果'option strict'沒有啓用,VB.NET將允許這樣做。如果輸入不是完全數字,它也將允許此分配,但會導致運行時異常。

+0

因此,基本上他是對的,唯一的問題是,他的語言名稱錯誤。大聲笑。 – jitendragarg 2011-05-24 10:12:08

+1

正確,事實上VB.net並不像C#那樣強類型,更多的是一種「我是什麼」的語言,而C#是「我說我說」的語言 – digEmAll 2011-05-24 10:38:01

相關問題