2012-03-27 68 views
-5
bankOptionEntity.AutoCompleteForForm = 
    (string.Compare(dr["Value"].ToString().Trim(), "Y", true) == 0); 

OR哪種說法更有效?

bankOptionEntity.AutoCompleteForForm = 
    dr["Value"].ToString().Trim().ToUpper().Equals("Y"); 
+1

測試它們時,結果如何? – David 2012-03-27 15:53:39

+0

你爲什麼不自己測試一下? – Timmerz 2012-03-27 15:54:39

+0

你將不得不解釋爲什麼你需要這個代碼是最有效的可能。這兩行應該大致相同afaik – Msonic 2012-03-27 15:55:49

回答

0

嘗試

var firstChar = dr["Value"].ToString()[0]; 
var ok = firstChar == 'y' || firstChar = 'Y'; 

,並提出一些性能測試 - 但我不認爲這真的會是一個問題,在所有。

PS:假設該字符串不爲空 - 如果這可能是一個問題,使其

var value = dr["Value"].ToStrin(); 
var firstChar = String.IsNullOrEmpty(value) ? 'n' : value[0]; 
var ok = firstChar == 'y' || firstChar = 'Y'; 
0

入住這post出來。在我看來,因爲你不必考慮文化敏感的比較,所以Equals應該比Compare方法更有效率。但是,請注意Trim和ToUpper方法都有性能成本。

問候,

+0

謝謝josemiguel – Flintstone 2012-03-27 16:07:06

0

如果你是在一個長循環執行這段代碼,問題的關鍵不是字符串比較,但這樣你在你的數據讀取器訪問列。首先獲取列號並在循環中使用它。

int valueOrdinal = dr.GetOrdinal("Value"); 
while (dr.Read()) { 
    bool ok = dr.GetString(valueOrdinal).Trim().ToUpper() == "Y"; 
    ... 
} 

如果你有一個短循環或根本沒有循環,無論如何它並不重要。