2010-07-08 67 views
1

J'utilise l'appel de fonction suivante:Déclaration conditionnelle passé à une fonction

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

Je voudrais mettre une déclaration conditionnelle là qui va changer SearchOption.AllDirectories-SearchOption.TopDirectoryOnly basé sur une certaine condition (A case à cocher cochée ou non)

Existe-t-il un moyen de le faire? (Je ne peux pas mettre toute la déclaration dans une instruction if, même avec une autre option la déclarant toujours, car elle ne me le permet pas, disant que filesfound n'existe pas ...)

+1

Veuillez ne pas dupliquer les balises dans le titre. Laissez simplement "C#" dans les balises. –

Répondre

6

Si vous voulez juste d'utiliser un conditionnel comme une expression puis utilisez l'opérateur ternaire/conditionnel

m_checkBox.Checked ? SearchOptions.TopDirectoryOnly : SearchOption.AllDirectories 

échantillon complet

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

une autre chose que je remarque dans votre question est que vous avez essayé d'utiliser un bloc d'instruction conditionnelle pour envelopper votre expression. Alors que ce cas peut être résolu sans une déclaration, il y a des occasions où l'utilisation d'une déclaration est plus naturelle. Dans ces cas, il est souvent plus facile de déplacer l'instruction dans le lambda au lieu d'entourer l'instruction englobante.

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

Je suis sûr que vous l'appelez seulement l'opérateur ternaire pour me remonter le moral. –

+0

@Jon, je ne peux pas rompre l'habitude de l'appeler l'opérateur ternaire. Je l'ai fait depuis l'université et difficile de passer mon processus de pensée à conditionnel :) – JaredPar

+0

merci beaucoup! Je savais qu'il y avait un moyen de le faire, je ne pouvais pas me souvenir comment. – muttley91

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

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

Qu'en est-il un bon vieux opérateur ternaire?

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