是否可以传递未初始化的条件?

时间:2014-07-11 16:22:03

标签: c# .net

简单地说我想知道这是否可能?

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;
 }

我只是想知道是否有办法做到这一点。

因为人们会问这是我原始代码的for循环

 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?>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

根据你的问题很难判断,但我认为你想要的是传递lambdas,这不是你现在所做的。

这样的东西似乎更接近你想要的东西:

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可能有更简单的方法来完成你想要做的所有事情。