文本框是否将全部数字文本保存为长整型或字符串?

文本框是否将全部数字文本保存为长整型或字符串?

问题描述:

我与我的队友就此进行了简短的讨论。他说,如果我在文本框中输入数字,然后尝试使用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

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

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

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

如果你知道你将只使用数值,请尝试使用NumericUpDown control
然后,您可以通过使用Value属性来获取/设置数值(十进制)。

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

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

+0

因此,基本上他是对的,唯一的问题是,他的语言名称错误。大声笑。 – jitendragarg 2011-05-24 10:12:08

+1

正确,事实上VB.net并不像C#那样强类型,更多的是一种“我是什么”的语言,而C#是“我说我说”的语言 – digEmAll 2011-05-24 10:38:01