有没有比使用嵌套ifs更好的方法来检查C#中是否存在多个子目录?

时间:2013-07-11 13:03:57

标签: c# winforms directory

我正在尝试检查是否存在所有需要的子目录并使用此代码片段:

DirectoryInfo gccdir = new DirectoryInfo(txtgccPath.Text);
List<string> subdirectories = new List<string>();

foreach (var item in gccdir.GetDirectories())
{
   subdirectories.Add(item.Name);
}

if (subdirectories.Contains("bin") &&
    subdirectories.Contains("i686-w64-mingw32") &&
    subdirectories.Contains("include") && 
    subdirectories.Contains("lib") &&
    subdirectories.Contains("libexec") && 
    subdirectories.Contains("share"))
{
  //statements 
}  

有没有更好的方法呢?
在这样的情况下,需要验证多个条件,最好的方法是避免过度使用if else语句吗?

4 个答案:

答案 0 :(得分:4)

你可以这样做

if(new[] {"bin", "include", "lib"}.All(subdirectories.Contains))
{


}

答案 1 :(得分:2)

你可以反过来这样做:

   DirectoryInfo gccdir = new DirectoryInfo(txtgccPath.Text);
    List<string> directorieslist=new List<string>(){"bin", "i686-w64-mingw32","include", "lib","libexec","share"};

    foreach (var item in gccdir.GetDirectories())
    {
        if(directorieslist.Contains(item.Name))
        {
             directorieslist.Remove(item.Name);                         
        } 
    }

    if(directorieslist.Count==0)
    {
       //statement
    }

答案 2 :(得分:1)

string[] subs = new string[] {
    "bin",
    "i686-w64-mingw32",
    "include"
    };

IEnumerable<string> exists = subdirectories.Join(subs, 
    sd1 => sd1, 
    sd2 => sd2, 
    (sd1, sd2) => sd1).ToArray();

if (subs.Length == exists.Length)
{
// contains all
}

答案 3 :(得分:1)

建立琼西的所作所为,

DirectoryInfo gccdir = new DirectoryInfo(txtgccPath.Text);
var subdirectories= gccdir.GetDirectories();
var dirsToCheckFor = new[] { "bin", "include", "lib", "libexec", "share", "i686-w64-mingw32" };

if(subdirectories.All(dir => dirsToCheckFor.Contains(dir.Name)))
{
    //gccdir contains all folders in dirsToCheckFor
}

唯一的区别是您不需要为文件夹中的目录创建字符串列表。