C# textbox是否将所有数字文本保存为长文本或字符串?

C# textbox是否将所有数字文本保存为长文本或字符串?,c#,.net,winforms,memory-management,variable-types,C#,.net,Winforms,Memory Management,Variable Types,关于这一点,我与我的队友进行了简短的讨论。他说,如果我在textbox中输入一个数字,并在以后使用textbox.text或val(textbox.text)尝试使用该值,我将不需要将该值解析为整数。根据他的说法,如果文本属性值是all number,则可以直接将值作为整数而不是字符串获取 因此,如果我有textBox1.Text=“12345”,那么下次如果我使用intABC=textBox1.Text,它将不会抛出错误。是这样吗?C#或其他.Net语言是否进行这种隐式转换?此外,代码将“12

关于这一点,我与我的队友进行了简短的讨论。他说,如果我在textbox中输入一个数字,并在以后使用textbox.text或val(textbox.text)尝试使用该值,我将不需要将该值解析为整数。根据他的说法,如果文本属性值是all number,则可以直接将值作为整数而不是字符串获取


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

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

然后,如果您想找回您的数字,您需要解析字符串,因此不允许隐式或显式转换为int(或者更好,如果您这样做,它将抛出异常…)

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

您可以使用以下代码轻松地测量大小(仅测量字符串的大小,而不会因引用大小等而产生开销):

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

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

如果您的朋友错了,这将使编译器不满意,编译器甚至不会为您自动转换。文本框的文本属性为字符串类型。检查这个


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

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


至于你对其他语言的问题;如果未启用“option strict”,VB.NET将允许此操作。但是,如果输入不完全是数字,它也将允许此赋值,从而导致运行时异常。

您可以尝试查看:-)因此,在这种情况下,它仍将占用5字节的内存空间,并将值存储为字符串。那么,结果发现有人欠我一杯啤酒!:)@jitendra garg:为了确保你赢了啤酒,但不要确定字符串大小,请使用
int numBytes=Encoding.Unicode.GetByteCount(stringToMeasure)
来测量实际大小(实际上“12345”是10个字节,而不是5个字节)。@jitendra,@digeMail:别忘了
string
对象也会有额外的开销。(我记不清到底有多少,但我想在每个字符2个字节的基础上加上大约20个字节。)@LukeH:说得好,我忘了提它了。例如,参考地址的大小…所以,基本上他是对的,唯一的一件事,他把语言名称弄错了。哈哈。没错,事实上VB.net不像C#那么强类型,更像是一种“我说什么”的语言,而C#是一种“我说什么”的语言