【问题标题】:Does textbox save an all number text as a long or string?文本框是否将所有数字文本保存为长字符串或字符串?
【发布时间】:2011-05-24 09:57:19
【问题描述】:

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

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

【问题讨论】:

  • 你可以试试看:-)

标签: c# .net winforms memory-management variable-types


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • SO,在这种情况下,它仍然会占用 5bytes 的内存空间,并将值存储为字符串。那么,原来有人欠我一杯啤酒! :)
  • @jitendra garg:确定你赢了啤酒,但不确定字符串大小,使用int numBytes = Encoding.Unicode.GetByteCount(stringToMeasure)测量实际大小(实际上“12345”是10个字节,不是 5 )。
  • @jitendra, @digEmAll:不要忘记string 对象也会有额外的开销。 (我记不清具体有多少,但我认为在每个字符 2 个字节的基础上大约是 20 个字节。)
  • @LukeH:好点,我忘了提。比如引用地址的大小...
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    关于您对其他语言的问题;如果未启用“选项严格”,VB.NET 将允许这样做。如果输入不完全是数字,它也将允许此分配,但是会导致运行时异常。

    【讨论】:

    • 所以,基本上他是对的,只是,他弄错了语言名称。哈哈。
    • 正确,实际上VB.net的类型不如C#强,更像是一种Do-What-I-Mean语言,而C#是一种Do-What-I-Say语言
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2017-03-01
      • 1970-01-01
      相关资源
      最近更新 更多