bankOptionEntity.AutoCompleteForForm =
(string.Compare(dr["Value"].ToString().Trim(), "Y", true) == 0);
OR哪種說法更有效?
bankOptionEntity.AutoCompleteForForm =
dr["Value"].ToString().Trim().ToUpper().Equals("Y");
bankOptionEntity.AutoCompleteForForm =
(string.Compare(dr["Value"].ToString().Trim(), "Y", true) == 0);
OR哪種說法更有效?
bankOptionEntity.AutoCompleteForForm =
dr["Value"].ToString().Trim().ToUpper().Equals("Y");
嘗試
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';
入住這post出來。在我看來,因爲你不必考慮文化敏感的比較,所以Equals應該比Compare方法更有效率。但是,請注意Trim和ToUpper方法都有性能成本。
問候,
謝謝josemiguel – Flintstone 2012-03-27 16:07:06
如果你是在一個長循環執行這段代碼,問題的關鍵不是字符串比較,但這樣你在你的數據讀取器訪問列。首先獲取列號並在循環中使用它。
int valueOrdinal = dr.GetOrdinal("Value");
while (dr.Read()) {
bool ok = dr.GetString(valueOrdinal).Trim().ToUpper() == "Y";
...
}
如果你有一個短循環或根本沒有循環,無論如何它並不重要。
測試它們時,結果如何? – David 2012-03-27 15:53:39
你爲什麼不自己測試一下? – Timmerz 2012-03-27 15:54:39
你將不得不解釋爲什麼你需要這個代碼是最有效的可能。這兩行應該大致相同afaik – Msonic 2012-03-27 15:55:49