2016-08-16 68 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; 

     } 

    }