我有以下方法
public List<AvailableFile> GetAvailableFiles(string rootFolder)
{
if (Directory.Exists(rootFolder))
{
try
{
foreach (string f in Directory.GetFiles(rootFolder))
{
if (f.ToString().Contains("test"))
{
files = CreateFileList(f);
}
}
}
catch (System.Exception excpt)
{
// log stuff
}
}
return files;
}
我想要做的是重构foreach循环中的if语句,使用switch语句,因为我需要检查各种不同的单词
但是,由于使用.Contains()
,我很难将switch语句放入,而且我需要检查每个文件名,这些文件名可能有也可能没有特定的字符集I& #39;我正在寻找。
有没有办法可以使用switch语句,还是我坚持使用各种if语句?
编辑 也许我不清楚自己想要做什么。而且看起来如何去做这是非常基于意见的。下面是一个快速模拟我如何描绘这个
public List<AvailableFile> GetAvailableFiles(string rootFolder)
{
if (Directory.Exists(rootFolder))
{
Log.Info("Checking folder: " + rootFolder + " for files");
try
{
foreach (string f in Directory.GetFiles(rootFolder))
{
// the if statement is now removed into another method CreateFileList
files = CreateFileList(f);
}
}
catch (System.Exception excpt)
{
Log.Fatal("GetAvailableFiles failed: " + excpt.Message);
}
}
return files;
}
// mock up
private static List<AvailableFile> CreateFileList(string entity)
{
List<AvailableFile> fileList = new List<AvailableFile>();
// how I can do it
if(entity.Contains("test"))
{
run process 1
}
else if (entity.Contains("run"))
{
run process 2
}
// the way I'd prefer to have it
switch(entity)
{
case "test":
run process 1
break;
case "run":
run process 2
break;
}
return fileList;
}
如果我需要使用多个if语句,我会,但我更喜欢使用开关。我目前可以用C#做什么?
答案 0 :(得分:1)
{{1}}
如果将所有有效字符串添加到数组中,则linq部分“valid.Any(v =&gt; f.ToString()。Contains(v)”将检查您的f.ToString()是否等于任何字符串其中而不是必须创建多个if语句
答案 1 :(得分:1)
foreach (string f in Directory.GetFiles(rootFolder).Where(o => o.Contains("test")))
{
// Code referencing 'f' here
}
如果您只想迭代做包含"test"
的文件名,则无需单独的条件。
另外,对ToString
的调用是多余的,它已经是我认为的字符串了。
这个问题似乎发生了重大变化。我会留下我的答案,但现在可能已经过时了。
答案 2 :(得分:1)
您可以使用LINQ遍历已有的列表,并检查给定字符串是否是该列表中某个现有单词的一部分。
using System.Linq;
public List<AvailableFile> GetAvailableFiles(string rootFolder, List<string> wordsToCompare)
{
if (Directory.Exists(rootFolder))
{
try
{
foreach (string f in Directory.GetFiles(rootFolder))
{
if (wordsToCompare.Any(v => f.ToString().Contains(v)))
{
// create file
}
}
}
catch
{
// log stuff
}
}
return files;
}
答案 3 :(得分:1)
switch(entity)
{
case "test":
只做同等比较
您需要使用
else if (entity.Contains("run"))
您可以创建一个返回函数的方法