String比较null和empty相等的位置

bil*_*llb 42 c#

使用C#和.NET 3.5,处理这种情况的最佳方法是什么.我有数百个字段可以从各种来源(主要是字符串)进行比较.有时,源将字符串字段返回为null,有时为空.当然,有时字段中会有文字.我当前对strA!= strB的比较并没有削减它,因为例如strA为null且strB为"".我知道我可以做string.IsNullOrEmpty导致双重比较和一些丑陋.有没有更好的方法来处理这个?我认为扩展方法,但你不能扩展运算符.

我想我正在寻找一种性感的方式来做到这一点.

iam*_*ael 66

不消除额外的潜在比较,但对于性感因素,你可以使用这样的东西:

(strA ?? "") == (strB ?? "")
Run Code Online (Sandbox Code Playgroud)

或稍微不那么性感,但更可取的形式:

(strA ?? string.Empty) == (strB ?? string.Empty)
Run Code Online (Sandbox Code Playgroud)

  • +1,但只有`String.Empty`的部分! (9认同)
  • 该死的!在错误的时刻点击回车键.意思是说:"string.Empty是首选"为什么?它更长,更丑,并且对运行时行为没有任何影响.请参阅有关String.Empty和[link]的其他SO条目(http://blog.codinghorror.com/micro-optimization-and-meatballs/).就我而言,""是完全可读的,并且比String.Empty更可取. (4认同)

Dr.*_*ice 60

由于您需要进行数百次比较,因此您可能希望调用单个函数,以便减少代码中的混乱和重复.我不认为有一个内置函数可以在一个中进行空/空字符串/比较检查,但你可以自己创建一个:

static class Comparison
{
    public static bool AreEqual(string a, string b)
    {
        if (string.IsNullOrEmpty(a))
        {
            return string.IsNullOrEmpty(b);
        }
        else
        {
            return string.Equals(a, b);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以为每个比较使用一个函数调用:

        if(Comparison.AreEqual(strA[0], strB[0])) { // ... }
        if(Comparison.AreEqual(strA[1], strB[1])) { // ... }
        if(Comparison.AreEqual(strA[2], strB[2])) { // ... }
        if(Comparison.AreEqual(strA[3], strB[3])) { // ... }
Run Code Online (Sandbox Code Playgroud)

如果您以后发现需要担心其他情况,例如忽略字符串开头或结尾处的空格,这种方法也更容易扩展; 然后,您可以在函数中添加更多逻辑来进行修剪或其他任何操作,并且您不必对调用函数的数百行代码进行任何修改.

  • @abhaybhatia String.Equals(a,b)不认为null等于空字符串,这是所期望的.因此,string.IsNullOrEmpty检查是必要的. (3认同)

Eri*_*ric 9

不像??那样性感,但如果你将它短路,你可以避免双倍比较的时间:

string.IsNullOrEmpty( strA ) ? string.IsNullOrEmpty( strB ) : (strA == strB )
Run Code Online (Sandbox Code Playgroud)


Rob*_*Day 5

关于什么

strA ?? "" == strB ?? ""
Run Code Online (Sandbox Code Playgroud)