具有null处理的字符串相等

Bra*_*itz 25 .net c# string null equality

我会经常使用此代码来比较字符串:

if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
    //they are equal, do my thing
}
Run Code Online (Sandbox Code Playgroud)

这首先处理null case等.

有没有更简洁的方法来进行字符串比较,可能只有一个方法调用可以处理可能的空值?我只是想知道如果测试值为null则字符串不相等.

(我有dejavu,我之前可能已经问过这个问题,如果是这样,我道歉)


更新:在我的情况下,str2是一个已知的好字符串,因此我不需要将其检查为null.str1是"未知"字符串,可能为null,所以我想在str1 空的情况下说"str1不等于str2" ...

SLa*_*aks 36

与Java不同,C#字符串覆盖==运算符:

if (str1 == str2)
Run Code Online (Sandbox Code Playgroud)

如果您想要不区分大小写的比较:

if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)


das*_*ght 15

如果您希望将两个null字符串视为彼此相等,则您的代码是最佳的.

另一方面,如果您希望将null值视为彼此相等,则可以使用

object.Equals(str1, str2)
Run Code Online (Sandbox Code Playgroud)

对于一个更"对称"的方法,它也处理null价值观.


小智 11

我知道这已有几年了,我认为来自dasblinkenlight的解决方案在功能上非常适合您的要求.但是出于可读性原因,我更喜欢这段代码:

String.Equals(str1, str2)
Run Code Online (Sandbox Code Playgroud)


Jus*_*ony 5

没有内置方法可以执行此操作,但您可以创建一个扩展方法来封装它。

public static StringExtensions
{
    public static Boolean IsNotNullAndEquals(this string str1, string str2)
    {
        return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

str1.IsNotNullAndEquals(str2);
Run Code Online (Sandbox Code Playgroud)

在我看来,命名将是你最难的事情......因为你需要传达你只是空检查str1。当用作扩展方法时,它读起来相当好,但如果用作常规静态方法,则它也不能传达这一点。