C# 我应该为代码构建一个表达式还是有许多路径?

C# 我应该为代码构建一个表达式还是有许多路径?,c#,C#,我有一个C4.0.Net应用程序,它当前解析文本行以查找特定字符串,我想添加一个功能,可以选择复选框来搜索所有目录,还可以按扩展名或所有文件进行过滤 最后,我用Directory.EnumerateFiles语句对四种可能的选择中的每一种进行了几个if/else语句 当我试图将枚举分配给foreach以循环遍历所有这些对象时,我总是遇到上面代码中上下文之外的错误。 我猜我需要在每个EnumerateFile if/else块中包含所有代码,或者我需要吗 我是一名VBA开发人员,正在努力跳转到C,

我有一个C4.0.Net应用程序,它当前解析文本行以查找特定字符串,我想添加一个功能,可以选择复选框来搜索所有目录,还可以按扩展名或所有文件进行过滤

最后,我用Directory.EnumerateFiles语句对四种可能的选择中的每一种进行了几个if/else语句

当我试图将枚举分配给foreach以循环遍历所有这些对象时,我总是遇到上面代码中上下文之外的错误。 我猜我需要在每个EnumerateFile if/else块中包含所有代码,或者我需要吗

我是一名VBA开发人员,正在努力跳转到C,我发现范围和上下文是我现在面临的最大挑战。在VB中,我会构建一个选项字符串,然后将它们连接起来&以获得一行可执行的代码,但尝试使用+和字符串变量并没有成功

下面是我正在谈论的if/else块

    try
        {
            string sourceDirectory =txtFolder.Text;
            var filters = new[] { txtFileExt.ToString() };
            var result = new List<string>();


            if (txtExtensionsFile == null)
            {
                if (chkSubFolderFiles.Checked)
                {
                    var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.AllDirectories) ;
                }
                else
                {
                     var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly) ;
                }
            }
            else
            {
                if (chkSubFolderFiles.Checked)
                {
                    var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.AllDirectories).Where(s => filters.Any(ext => ext == Path.GetExtension(s)))) ;
                }
                else
                {
                    var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly).Where(s => filters.Any(ext => ext == Path.GetExtension(s)))) ;
                }
            }
            foreach (string filename in txtFiles)
            {
                using (var reader = new StreamReader(filename))
                if (Path.GetExtension(filename) == txtFileExt.Text) 
    //continues on to parse out text from each file
    }

例如,您可以像下面这样重写if语句

var searchOption = chkSubFolderFiles.Checked ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.*", searchOption);
if (null != txtExtensionsFile)
    txtFiles = txtFiles.Where(s => filters.Any(ext => ext == Path.GetExtension(s)));

有两种不同的方法可以在不使用太多冗余代码的情况下实现这一点。。例如,您可以将其替换为变量var files=Directory。EnumerateFiles@C:\path\folder\,***,SearchOption.AllDirectories.where=>s.EndsWith.mp3 | | s.EndsWith.jpg;你可以混搭。。并以这种方式获取所有文件var allFilenames=Directory.enumeratefilepath.Selectp=>Path.GetFileNamep;