2014-07-11 46 views
0

簡單地說,我想知道這是否可能?是否可以傳遞未初始化的條件?

if (Descriptionsearch.Checked) 
{ 
    searchResult = searchResultBuilder(a.Description == textBox.Text)) 
} 
else if (titleSearch.Checked) 
{ 
    searchReuslt = searchResultBuilder(a.title == textBox.Text)) 
} 

正如你所看到的,我只是發送一個尚未初始化但將在使用時的變量條件。

private List<int> searchResultBuilder(Func<bool> condition) 
{ 
    foreach (var element in currentPosition.Where(a => condition())) 
    { 
      searchResults.Add(currentPosition.IndexOf(element)); 
    } 

    return searchResults; 
} 

我只是想知道是否有辦法做到這一點。

,因爲人們都在問這是從我的原代碼迴路

foreach(var element in main.currentPosition.Where(a => (a.key != null && main.msgSigCollection1.msgSig[(int)a.key].Description.IndexOf(searchTextBox.Text, StringComparison.OrdinalIgnoreCase) >= 0) || (a.value != null && main.msgSigCollection2.msgSig[(int)a.value].Description.IndexOf(searchTextBox.Text, StringComparison.OrdinalIgnoreCase) >= 0))) 
{ 
     searchResults.Add(main.currentPosition.IndexOf(element)); 
} 

其中currentPositionList<int?,int?>

+0

使用謂詞構建器http://www.albahari.com/nutshell/predicatebuilder.aspx –

+2

所以你知道,'a.Description == textBox.Text'是一個布爾值,而不是'Func ' – gunr2171

+0

爲什麼不能你只是測試它而不是發佈到SO。並且您沒有返回列表。 – Paparazzi

回答

1

很難根據你的問題說,但我想你想要的是被路過的lambda表達式,這是不是你現在在做什麼。

像這樣的事情似乎更接近你想要什麼:

if(Descriptionsearch.checked == true) 
    searchReuslt = searchResultBuilder(a => a.Description == textBox.Text)) 
else if(titleSearch.checked == true) 
    searchReuslt = searchResultBuilder(a => a.title == textBox.Text)) 

private List<int> searchResultBuilder<T>(Func<T, bool> condition){ 
    var searchResults = new List<int>(); 
    foreach (var element in currentPosition.Where(condition)) 
    { 
      searchResults.Add(currentPosition.IndexOf(element)); 
    } 
    return searchResults; 
} 

事實上,雖然,你的問題應該說明你想要什麼來完成的,你不只是如何試圖到那裏。使用LINQ可能有更簡單的方法來完成您嘗試在此處執行的所有操作。

+0

我正在做一個查找對話框,有很多不同的選項,比如匹配大小寫等。 – user3813249

2

你需要指定一個lambda語法來實現你想要的。

例:(input parameters) => expression

if(Descriptionsearch.checked == true) 
    searchReuslt = searchResultBuilder(a => a.Description == textBox.Text)) 
else if(titleSearch.checked == true) 
    searchReuslt = searchResultBuilder(a => a.title == textBox.Text)) 

MSDN

+0

這不會像你寫的那樣工作。 'Where'預計'Func '而不是'Func '。 – MgSam

+0

@MgSam剛剛糾正它。 –

相關問題