2011-05-17 59 views
0

我有一個特定的lambda似乎並不想正常工作,雖然邏輯看起來很合理。C#lambda表達式無法管理某個字符串比較

index = llCodeList.FindIndex(f => string.Compare(f.Threshold.ToString(), searchText, true) >= 0); 

f.Threshold是一個整數值,似乎轉換不會發生,它會破壞我的搜索功能。任何人都可以對此有所瞭解嗎?

+0

什麼類型llCodeList – Jimmy 2011-05-17 14:07:47

+3

它是如何打破你的搜索?你能顯示一些樣本輸入的結果嗎? – dlev 2011-05-17 14:07:57

+3

一個簡短但完整的程序真的有幫助。我真的懷疑你是否在C#編譯器或.NET中發現了一個錯誤... – 2011-05-17 14:09:21

回答

1

爲什麼不溝通字符串比較並明確檢查?

index = llCodeList.FindIndex(
      f => f.Threshold.ToString() 
          .Contains(searchText)); 

您確定搜索文本是閾值數的一個子集嗎?

此外,它可能是你不瞭解如何string.Compare工作,它不會檢查數值,但字符串值。對於上述if searchText4且閾值爲-40將與您的謂詞匹配。我的例子更明確地表明瞭string.Compare(...,...,...) >= 0

行爲如果你想基於具有找到結果大於或等於匹配閾值和SEARCHTEXT你能做到這一點

int search = 0; 
int32.TryParse(searchText, out search); 
index = llCodeList.FindIndex(f => f.Threshold >= search); 
0

如果我的意見正確得到了什麼你正在嘗試做的,然後做這樣的事情的要點是:

int index = -1; 
int intVal; 
if (int.TryParse(seachText, intVal)){ 
    index = llCodeList.FindIndex(f => f.Threshold >= intVal); 
} 
0

我想你的意思是檢查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));