我会经常使用此代码来比较字符串:
if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
//they are equal, do my thing
}
首先处理空案例等。
是否有一种更简洁的方法来进行字符串比较,可能只有一个方法调用可以处理可能的空值?我只是想知道如果测试值为null则字符串不相等。
(我有dejavu,我之前可能会问过这个问题,如果有的话,我道歉)
更新:在我的情况下,str2是一个比较好的已知好的字符串,所以我不需要检查它是否为null。 str1是“未知”字符串,可能为null,所以我想在str1 null ...
的情况下说“str1不等于str2”答案 0 :(得分:34)
与Java不同,C#字符串覆盖==
运算符:
if (str1 == str2)
如果您想要不区分大小写的比较:
if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)
答案 1 :(得分:15)
如果您不希望将两个null
字符串视为彼此相等,那么您的代码就是最优的。
另一方面,如果您希望将null
值视为彼此相等,则可以使用
object.Equals(str1, str2)
用于处理null
值的更“对称”方法。
答案 2 :(得分:9)
我知道这已有几年了,我认为来自dasblinkenlight的解决方案在功能上非常适合您的要求。 但是出于可读性原因,我更喜欢这段代码:
String.Equals(str1, str2)
答案 3 :(得分:3)
没有内置的方法可以做到这一点,但你可以创建一个扩展方法来封装它。
public static StringExtensions
{
public static Boolean IsNotNullAndEquals(this string str1, string str2)
{
return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
}
}
然后像这样使用它:
str1.IsNotNullAndEquals(str2);
在IMO中命名将是你最难的事情......因为你需要传达你只是空检查str1
。当用作扩展方法时,它读取得相当好,但如果用作常规静态,那么它也不会传达它。
答案 4 :(得分:2)
您可以使用此代码
object.Equals(str1, str2)
答案 5 :(得分:1)
我知道这是很久以前的答案并且有很好的答案,尽管根据 Microsoft 文档 (https://docs.microsoft.com/en-us/dotnet/api/system.string.equals?view=net-5.0),您可以使用以下内容来检查这两种情况:
if(string.Equals(str1,str2)){
//they are equal with null handling
}
答案 6 :(得分:0)
这样做:
string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
答案 7 :(得分:0)
在最新的C#版本中,我们现在还具有null合并选项。这不是一个精确的解决方案,但可以出于某些目的而成为一种更清洁的解决方案。在比较中,实际上将str1升级为空字符串需要一些自由,以便它实际上是null。
if((str1?"").Equals(str2))
{
//they are equal, do things here
}