传递给函数的条件语句

时间:2010-07-08 16:21:06

标签: c# conditional-statements

我正在使用以下函数调用:

var filesfound = filterSplit.SelectMany(
    filter => folder1.GetFiles(
                    filter, 
                    SearchOption.AllDirectories
    )
);  

我想在那里添加条件语句,根据特定条件(选中或不选中复选框)将SearchOption.AllDirectories更改为SearchOption.TopDirectoryOnly

有办法做到这一点吗? (我不能将整个声明放入if语句中,即使还有一个else选项仍然声明它,因为它不允许我这样做,说文件存在不存在......)

4 个答案:

答案 0 :(得分:6)

如果您只想将条件用作表达式,则使用三元/条件运算符

m_checkBox.Checked ? SearchOptions.TopDirectoryOnly : SearchOption.AllDirectories

完整样本

var filesfound = filterSplit.SelectMany(filter => folder1.GetFiles(
  filter, 
  m_checkBox.Checked 
    ? SearchOptions.TopDirectoryOnly 
    : SearchOption.AllDirectories)); 

我在你的问题中注意到的另一件事是你试图使用条件语句块来包装你的表达式。虽然这种情况可以在没有陈述的情况下解决,但有时候使用陈述更自然。在这些情况下,将语句移动到lambda而不是围绕封闭语句通常更容易。

var filesfound = filterSplit.SelectMany(filter => 
{
  if ( m_checkBox.Checked ) { 
    return folder1.GetFiles(filter, SearchOptions.TopDirectoryOnly); 
  } else {
    return folder1.GetFiles(filter, SearchOptions.AllDirectories);
  }
});

答案 1 :(得分:1)

var filesfound = filterSplit.SelectMany(filter => folder1.GetFiles(filter, checkbox.Checked ?  SearchOption.TopDirectoryOnly : SearchOption.AllDirectories));

答案 2 :(得分:1)

var filesfound = filterSplit.SelectMany(filter => 
{
    SearchOption so;
    if (checkbox.Checked)
        so = SearchOption.TopDirectoryOnly;
    else
        so = SearchOption.AllDirectories;

    return folder1.GetFiles(filter, so);
});  

答案 3 :(得分:1)

一个好老的三元运营商怎么样?

var filesfound = filterSplit.SelectMany(filter => folder1.GetFiles(filter, 
       checkBox.Checked ? SearchOptions.AllDirectories : SearchOptions.TopDirectoryOnly))