【问题标题】:Is there anything in C# that is the opposite of IsNullOrEmptyC# 中是否有与 IsNullOrEmpty 相反的内容
【发布时间】:2018-10-11 22:07:48
【问题描述】:

我需要找到与IsNullOrEmpty相反的东西吗?

这是文本行。

{
    while (string.IsNullOrEmpty(TextBox.Text))
}

与此相反的是什么?

【问题讨论】:

  • !IsNullOrEmpty(TextBox.Text) 有什么问题?
  • 添加!在布尔值总是否定它之前(即会给你相反的结果)
  • 另外,重新打开这个,因为考虑到 TextBox 的“非空”属性,重复问题的答案在这种情况下是错误的,或者至少是误导性的。
  • 好的,将我的大部分 cmets 移至答案。只是留下这个并重新打开解释。

标签: c# textbox isnullorempty


【解决方案1】:
{

    while (!string.IsNullOrEmpty(TextBox.Text))

}

【讨论】:

    【解决方案2】:

    在 Winforms TextBox 控件的上下文中,您根本不需要测试 null.Text 属性。 遗憾的是,我找不到这方面的文档,我担心这是 mdsn => docs move 的牺牲品,但我已经在 Visual Studio 中验证了它。

    您也可以验证它;试试看。使用文本框制作一个简单的项目,并在代码中将其设置为 Textnull。然后检查调试器,你会看到它实际上设置了一个空字符串。 TextBox 控件就是这样很好,大多数其他股票 Winforms 控件也是如此。

    考虑到这一点,这段代码的反面:

    while (string.IsNullOrEmpty(TextBox.Text))
    

    可以简化为:

    while (TextBox.Text != "")
    

    尽管您可能还想考虑空白,这将是以下两行之一:

    while (TextBox.Text.Trim() != "")
    while (!string.IsNullOrWhitespace(TextBox.Text))
    

    但现在我需要提出另一点:这些选项都没有在控件上执行Invoke,这意味着它必须在 UI 线程上运行。 在你的 UI 线程上运行这样的while() 循环非常糟糕。你指望用户打破循环,但与此同时你已经阻止了整个用户接口,程序将很难处理最终解除阻塞的输入。

    相反,您需要处理按键事件,或在用户尝试根据文本框值启动操作时验证文本框,或将其移至另一个线程。

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 2011-08-15
      • 1970-01-01
      • 2011-09-11
      • 2016-02-10
      • 2018-11-09
      • 2018-04-09
      • 2016-10-15
      • 1970-01-01
      相关资源
      最近更新 更多