我有一個特定的lambda似乎並不想正常工作,雖然邏輯看起來很合理。C#lambda表達式無法管理某個字符串比較
index = llCodeList.FindIndex(f => string.Compare(f.Threshold.ToString(), searchText, true) >= 0);
f.Threshold是一個整數值,似乎轉換不會發生,它會破壞我的搜索功能。任何人都可以對此有所瞭解嗎?
我有一個特定的lambda似乎並不想正常工作,雖然邏輯看起來很合理。C#lambda表達式無法管理某個字符串比較
index = llCodeList.FindIndex(f => string.Compare(f.Threshold.ToString(), searchText, true) >= 0);
f.Threshold是一個整數值,似乎轉換不會發生,它會破壞我的搜索功能。任何人都可以對此有所瞭解嗎?
爲什麼不溝通字符串比較並明確檢查?
index = llCodeList.FindIndex(
f => f.Threshold.ToString()
.Contains(searchText));
您確定搜索文本是閾值數的一個子集嗎?
此外,它可能是你不瞭解如何string.Compare
工作,它不會檢查數值,但字符串值。對於上述if searchText
爲4
且閾值爲-40
將與您的謂詞匹配。我的例子更明確地表明瞭string.Compare(...,...,...) >= 0
行爲如果你想基於具有找到結果大於或等於匹配閾值和SEARCHTEXT你能做到這一點
int search = 0;
int32.TryParse(searchText, out search);
index = llCodeList.FindIndex(f => f.Threshold >= search);
如果我的意見正確得到了什麼你正在嘗試做的,然後做這樣的事情的要點是:
int index = -1;
int intVal;
if (int.TryParse(seachText, intVal)){
index = llCodeList.FindIndex(f => f.Threshold >= intVal);
}
我想你的意思是檢查IndexOf
而不是使用Compare
。
index = llCodeList.FindIndex(
f => f.Threshold.ToString().IndexOf(
searchText, StringComparison.InvariantCultureIgnoreCase) >= 0);
但名稱FindIndex
聽起來像你想要返回實際的索引。我的水晶球說你正在尋找像
index = llCodeList.FindIndex(
f => f.Threshold.ToString().IndexOf(
searchText, StringComparison.InvariantCultureIgnoreCase));
什麼類型llCodeList – Jimmy 2011-05-17 14:07:47
它是如何打破你的搜索?你能顯示一些樣本輸入的結果嗎? – dlev 2011-05-17 14:07:57
一個簡短但完整的程序真的有幫助。我真的懷疑你是否在C#編譯器或.NET中發現了一個錯誤... – 2011-05-17 14:09:21