我正在尝试检查是否存在所有需要的子目录并使用此代码片段:
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语句吗?
答案 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
}
唯一的区别是您不需要为文件夹中的目录创建字符串列表。