测试字符串为空的最佳方法是什么?

时间:2014-07-09 10:31:53

标签: c#

我通常这样做:

void Incoming(String str)
{
    if (str == "")
    {

    }
}

但我看到别人的代码这样做了:

void Incoming(String str)
{
    if (str == String.Empty)
    {

    }
}

在我的情况下,我知道str不应为null。因此,如果字符串为null而不是隐藏问题,它将导致异常,因此以下是一个好主意:

void Incoming(String str)
{
    if (str.Length == 0)
    {

    }
}

我已经注意到它也被使用了,但这似乎接受了字符串可能为null,而不是去修复它为空的原因。静默处理字符串为空是一个好主意吗?

void Incoming(String str)
{
    if (String.IsNullOrEmpty(str))
    {

    }
}

5 个答案:

答案 0 :(得分:2)

if(String.IsNullOrEmpty(str1))
{
     //do stuff
}

始终使用此功能!

答案 1 :(得分:1)

What is the best way of testing that a string is empty?

最后一个选项String.IsNullOrEmpty(str)最好这样做。它会检查两种情况

  1. 如果字符串为null
  2. 如果您的字符串等于String.Empty,即""

答案 2 :(得分:0)

通常,您不应该使用系统流的例外。因此,如果String可以(但不应该)为null,那么检查NullOrEmpty并在那里修复它。 检查是否为NULL或空是什么问题?两者都会导致一些修复代码,或者你可以抛出自己的" IHateNullStrings" -Exception。

如果您想要完全安全:

            String.IsNullOrWhiteSpace

用这个检查

  • Null
  • 清空
  • 只有WhiteSpace字符

编辑:异常流是程序传递的路径。使用异常#34;可能发生" -things使f.e.调试方式比较复杂。 对此进行了大量讨论,例如: :Why not use exceptions as regular flow of control?

答案 3 :(得分:0)

如果字符串永远不会为null,请在测试它是否为空之前进行显式空检查。

if (string == null) throw new Exception(); // ArgumentNullException, for example
if (string == "") 
{
    ...
}

答案 4 :(得分:0)

虽然你说str不应该为null,但是你依赖外部的东西来坚持这一点,这不是一个好主意。另外,在if块中抛出异常并不是一个好主意,因为:

  1. 例外是费用,因此应尽可能避免
  2. 默认异常不会给调用者很多关于他们做错了什么的背景。因此,如果你真的需要一个例外,那就自己抛出一些有意义的东西(I.E. ArgumentNullException)和一个有用的消息
  3. 所以如上所述你可以做一个单独的空检查:

    if (str == null) throw new ArgumentNullException("str cannot be null");
    

    或者你可以将null和string.Empty视为相等并使用(这将是我的默认值):

    if (string.IsNullOrEmpty(str))
    {
        //do something
    }
    

    或者您甚至可以使用以下方法处理与null和empty相同的空字符串:

    if (string.IsNullOrWhiteSpace(str))
    {
        /do something
    }
    

    这在很大程度上取决于你获得空字符串时的逻辑。但是,你应该总是写一些防御性代码来处理不符合前提条件的论据