Условное утверждение передано в функцию - PullRequest
1 голос
/ 08 июля 2010

Я использую следующий вызов функции:

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

И я бы хотел добавить туда условный оператор, который изменит SearchOption.AllDirectories на SearchOption.TopDirectoryOnly в зависимости от определенного условия (флажок установлен или нет)

Есть ли способ сделать это? (Я не могу поместить всю декларацию в инструкцию if, даже если опция else по-прежнему объявляет ее, поскольку я не могу этого сказать, что filesfound не существует ...)

Ответы [ 4 ]

6 голосов
/ 08 июля 2010

Если вы просто хотите использовать условное выражение как выражение, используйте троичный / условный оператор

m_checkBox.Checked ? SearchOptions.TopDirectoryOnly : SearchOption.AllDirectories

Полный образец

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

Еще одна вещь, которую я заметил в вашем вопросе, - вы пытались использовать блок условных операторов для переноса выражения. Хотя этот случай может быть решен без оператора, бывают случаи, когда использование оператора более естественно. В этих случаях часто легче перенести оператор в лямбду, а не окружать вмещающий оператор.

var filesfound = filterSplit.SelectMany(filter => 
{
  if ( m_checkBox.Checked ) { 
    return folder1.GetFiles(filter, SearchOptions.TopDirectoryOnly); 
  } else {
    return folder1.GetFiles(filter, SearchOptions.AllDirectories);
  }
});
1 голос
/ 08 июля 2010

А как насчет старого доброго троичного оператора?

var filesfound = filterSplit.SelectMany(filter => folder1.GetFiles(filter, 
       checkBox.Checked ? SearchOptions.AllDirectories : SearchOptions.TopDirectoryOnly))
1 голос
/ 08 июля 2010
var filesfound = filterSplit.SelectMany(filter => 
{
    SearchOption so;
    if (checkbox.Checked)
        so = SearchOption.TopDirectoryOnly;
    else
        so = SearchOption.AllDirectories;

    return folder1.GetFiles(filter, so);
});  
1 голос
/ 08 июля 2010
var filesfound = filterSplit.SelectMany(filter => folder1.GetFiles(filter, checkbox.Checked ?  SearchOption.TopDirectoryOnly : SearchOption.AllDirectories));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...