【问题标题】:Convert String.Empty to Nothing/Null将 String.Empty 转换为 Nothing/Null
【发布时间】:2010-02-22 23:33:59
【问题描述】:

是否有一个 .Net 函数可以做到这一点。我想如果没有我必须制作自己的方法。

问题是我有一个功能。它接受整数。如果您传递 0 整数或空值,它仍然有效。问题是空文本框的值是 String.Empty 值。

我不想使用 if。我的意思是它可以,但如果我可以像这样调用我的函数会更好

MyFunction(txtTextbox.Text)

但它不起作用,因为它无法将 string.empty 转换为整数。

【问题讨论】:

  • 这个问题令人困惑。 MyFunction和你在第二段中提到的功能一样吗?似乎不可能,因为您显然打算将string 传递给它,而不是“0 整数或空值”。如果您不知道,您不能只将string 传递给接受intint? 的函数。
  • 为什么不呢?它接受整数,但如果你传递一个字符串,它应该被隐式转换。 MyFunction("200") - 有效。
  • 如果字符串中表示的数字太大而无法放入整数怎么办?如果字符串表示浮点数怎么办?如果字符串根本不是数字怎么办?这些都是您应该处理的情况,一种干净的方法是将字符串值正确转换为整数beforehand

标签: .net string textbox integer nothing


【解决方案1】:

我猜你需要:

if(string.IsNullOrEmpty(value)) value = null;

int MyFunction(string value)
 {
      if(string.IsNullOrEmpty(value)) return 0;

      int val = 0;
      int.TryParse(value, out val);
      return val;
 }

【讨论】:

  • 后者不需要额外的if(...) return 0;。此外,任何采用out 参数的方法都必须在返回之前为其分配一个值。所以val会一直初始化,不需要再做一次。 (=0 部分。)
  • @andras:感谢您的笔记。
【解决方案2】:

嗯,在你的函数中接受一个应该读取整数的整数,并事先在字符串上使用int.Parseint.TryParse 怎么样?

【讨论】:

    【解决方案3】:

    只是从不同的角度来看,我假设您的文本框也需要只允许输入数字。否则,仅处理 null 不会对输入非数字的人提供防弹。您必须为它创建一些掩码、事件处理程序或验证。如何创建您自己的 NumTextBox,它继承自 TextBox 并具有您已经拥有的输入限制行为,并覆盖 Text 属性或创建一个新的属性调用 Value 来处理所有转换并在整个系统中一致地返回适当的值。

    【讨论】:

    • 这是个好主意,虽然对于这么简单的事情来说工作量太大了。
    • 说真的,矫枉过正。您可以将验证器附加到“普通”文本框,这比创建自己的子类并尝试使用它要容易得多。
    • 就像我说的只是另一个视角。对于一个使用的人来说,这是矫枉过正,但如果在应用程序中的任何地方都期望相同的行为,那么抽象和封装将是有益的
    【解决方案4】:

    试试这个

       Sub MyFunction(ByVal Param1Integer as Integer)
         ' Do Something
       End Sub
    
       Sub MyFunction(ByVal Param1String as String)
         MyFunction(Val(Param1String))
       End Sub
    

    它假设一个空字符串与 0 相同。

    【讨论】:

      【解决方案5】:

      您是否考虑过使用NumericUpDown(旋转控制)?它有一个 .Value 成员(总是一个有效的整数!),而不必从字符串转换。您可以限制上限和下限,以及设置默认值。

      【讨论】:

        【解决方案6】:

        我只会使用内联 IF 语句 (VB):

        MyFunction(IIf(txtTextBox.Text Is Nothing, "", txtTextBox.Text))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-06
          • 1970-01-01
          • 1970-01-01
          • 2012-09-25
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 2017-07-04
          相关资源
          最近更新 更多