我经常使用这段代码来比较字符串:
if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
//they are equal, do my thing
}
这首先处理 null 情况等。
是否有一种更简洁的方法来进行字符串比较,也许使用单个方法调用来处理可能的空值?我只是想知道如果测试值为空,字符串不相等。
(我有似曾相识的感觉,我以前可能问过这个问题,如果是的话我很抱歉)
更新:就我而言,str2 是一个已知的可以比较的好字符串,所以我不需要检查它是否为空。 str1 是“未知”字符串,可能为 null,所以我想说在 str1 is null 的情况下“str1 不等于 str2”...
与 Java 不同,C# 字符串会覆盖
==
运算符:
if (str1 == str2)
如果您想要不区分大小写的比较:
if (string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase))
如果您不想想要将两个
null
字符串视为彼此相等,那么您的代码是最佳的。
另一方面,如果您希望将
null
值视为彼此相等,则可以使用
object.Equals(str1, str2)
更“对称”的方法也可以处理
null
值。
这并不是将
null
字符串视为相等的字符串相等性对称检查的唯一方法:您还可以使用 string.Equals(str1, str2)
甚至 str1 == str2
,它会重定向到 string.Equals
。
我知道这已经有几年了,我认为 dasblinkenlight 的解决方案在功能上非常适合您的要求。 不过,出于可读性的原因,我确实更喜欢这段代码:
String.Equals(str1, str2)
没有内置方法可以执行此操作,但您可以创建一个扩展方法来封装它。
public static StringExtensions
{
public static Boolean IsNotNullAndEquals(this string str1, string str2)
{
return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
}
}
然后像这样使用它:
str1.IsNotNullAndEquals(str2);
在我看来,命名将是你最难的事情……因为你需要表达你只是进行空检查
str1
。当用作扩展方法时,它读起来相当好,但如果用作常规静态方法,则它也不能传达这一点。
这样就可以了:
string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
您可以使用此代码
object.Equals(str1, str2)
我知道这已经是很久以前的答案了,并且有很好的答案,尽管根据 Microsoft 文档(https://learn.microsoft.com/en-us/dotnet/api/system.string.equals?view=net-5.0 )您可以使用以下方法来检查这两种情况:
if(string.Equals(str1,str2)){
//they are equal with null handling
}
在最新的 C# 版本中,我们现在还具有空合并选项。这不是一个精确的解决方案,但对于某些目的来说可能是一种更干净的解决方案。为了比较的目的,在 str1 实际上是 null 的情况下,需要一些自由来“升级”为空字符串。
if((str1??"").Equals(str2))
{
//they are equal, do things here
}
Necro 帖子,但给出答案,以防它帮助其他找到此帖子的人。
if (str1?.Equals(str2) ?? false)
如果
str1
不为空,则将执行针对 str2
的检查。如果 str1
为空,那么您将获得空合并运算符 ??
的右侧,这将为您提供 false
。