3

我和我的队友就这个问题进行了简短的讨论。他说,如果我在文本框中输入一个数字,并在稍后使用 textbox.text 或 val(textbox.text) 尝试使用该值,我将不需要将值解析为整数。据他介绍,如果文本属性值都是数字,则可以直接将值作为整数获取,而不是字符串。

所以,如果我有textBox1.Text = "12345",那么下次如果我使用intABC = textBox1.Text,它就不会抛出错误。这样对吗?C# 或其他 .Net 语言是否进行这种隐式转换?此外,代码将存储"12345"为字符串还是整数?这个值需要多少内存,5个字符5字节或整数2字节?

4

4 回答 4

14

TextBox.Text将文本保留为简单的字符串,它不关心字符串的真正“含义”。

然后,如果您想取回您的号码,则需要解析字符串,因此不允许隐式或显式转换为 int (或者更好的是,如果您这样做,它将引发异常......)。

关于大小,该文本存储为 UNICODE (UTF-16) 字符串,因此每个字符 2 到 4 个字节(取决于字符)。

您可以使用以下代码轻松测量大小(只是字符串的大小,没有由于参考大小等导致的开销):

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

要查找有关字符串、unicode 和编码的更多信息,请查看此处此处此处

于 2011-05-24T09:59:37.070 回答
6

你的朋友错了,它会让编译器不高兴,编译器甚至不会为你自动转换它。TextBox 的文本属性是字符串类型。检查这个

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.text.aspx

于 2011-05-24T10:00:04.927 回答
2

如果您知道您只会使用数值,请尝试使用NumericUpDown 控件。然后,您可以使用该属性
获取/设置数值(十进制) 。Value

NumericUpDown控件包含单个数值,可以通过单击控件的向上或向下按钮来增加或减少该数值。用户也可以输入一个值,除非 ReadOnly 属性设置为 true。

于 2011-05-24T10:04:49.493 回答
2

至于你对其他语言的问题;如果 'option strict' 未启用,VB.NET 将允许这样做。如果输入不完全是数字,它也将允许此分配,但是会导致运行时异常。

于 2011-05-24T10:05:00.337 回答