使用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)
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)
如果您以后发现需要担心其他情况,例如忽略字符串开头或结尾处的空格,这种方法也更容易扩展; 然后,您可以在函数中添加更多逻辑来进行修剪或其他任何操作,并且您不必对调用函数的数百行代码进行任何修改.
不像??那样性感,但如果你将它短路,你可以避免双倍比较的时间:
string.IsNullOrEmpty( strA ) ? string.IsNullOrEmpty( strB ) : (strA == strB )
Run Code Online (Sandbox Code Playgroud)