2016-08-16 34 views
0

检查改变的值我有6个特性:比较两个字符串,并在包含范围

oldprop1,oldprop2,oldprop3 
newprop1,newprop2,newprop3 

我要检查是否值改变。如果它以某种组合的方式变化,那么我想记录它。

如果这5个发生改变,则应当记录:

P to Y 
P to N 
blank to Y -- here blank means "" 
blank to N 
N to Y 

什么我现在做

if (!oldprop1.Trim().Equals(newprop1.Trim()) && (oldprop1.ContainsAny("P", "N","")) && newprop1.ContainsAny("Y", "N")) 
{ 
    //log me to DB 
} 
if (!oldprop2.Trim().Equals(newprop2.Trim()) && (oldprop2.ContainsAny("P", "N", "")) && newprop2.ContainsAny("Y", "N")) 
{ 
    //log me to DB 
} 
if (!oldprop3.Trim().Equals(newprop3.Trim()) && (oldprop3.ContainsAny("P", "N", "")) && newprop3.ContainsAny("Y", "N")) 
{ 
    //log me to DB 
} 

public static bool ContainsAny(this string haystack, params string[] needles) 
{ 
    foreach (string needle in needles) 
    { 
     if (haystack.Contains(needle)) 
      return true; 
    } 
    return false; 
} 

有没有更好的方式来写这个?

+1

的字符串不能包含空字符串,字符串或者是,或不是,空的。 – Kevin

回答

0

你可以写,你在oldpropXnewpropX通过并执行的逻辑在那里的方法,那么你只是做:

if (SomeFunc(oldprop1, newprop1) || SomeFunc(oldprop2, newprop2)...) 
{ 
// log to DB. 
} 

SomeFunc()会做Equals检查和P,N,等等。检查。

1

最好使用开关语句。这里是代码

public void CompareAndLog(string first, string second) 
    { 
     switch (first) 
     { 

      case "P": if (second == "Y" || second == "N") ;//log me to db 
       break; 
      case "N": if (second == "Y") ; //log me to db 
       break; 
      case "": if (second == "Y" || second == "N") ;//log me to db 
       break; 

     } 

    }