如何创建动态if条件

时间:2015-06-22 12:48:34

标签: c# visual-studio if-statement

您好我试图为文件名编写搜索工具,允许使用多个单词进行搜索。 目前我只能搜索一个单词,但我想用更多的单词组合来过滤我的结果。

到目前为止,这是我的代码:

public List<String> startYareSearch(string query, string source)
{      
    List<String> SearchResultList = new List<String>();
    List<String> FileNameList = getFileNames(source);

    foreach (string fileName in FileNameList)
    {
        if (fileName.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0)
        {
            SearchResultList.Add(fileName);
            continue;
        }
    }

    return SearchResultList;
}

我认为我需要一个从数组接收查询并生成动态if条件的函数。

举个例子:

String[] queries=  new string[] { "Tobias", ".txt"};   
String fileName= "blablaTobiasbla.txt";

if (fileName.IndexOf("Tobias", StringComparison.OrdinalIgnoreCase) >= 0 && fileName.IndexOf(".txt", StringComparison.OrdinalIgnoreCase) >= 0)
{
    SearchResultList.Add(fileName);
    continue;
}

是否可以动态创建if条件?你知道更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ执行以下操作:

var result= FileNameList.Where(f=>queries.Contains(f));

答案 1 :(得分:2)

如果您愿意,可以这样做

internal class Program
{
    private static void Main(string[] args)
    {
        List<string> fileNames = new List<string> {"blablaTobiasbla.txt"};
        List<string> queries = new List<string> {"Tobias", ".txt"};

        var results = SearchFileNames(fileNames, queries);
    }

    private static IEnumerable<string> SearchFileNames(IEnumerable<string> fileNames, IEnumerable<string> queries)
    {
        return fileNames.Where(fileName => queries.All(fileName.Contains));
    }
}

此SearchFileNames方法检查查询列表中的所有项目是否包含在文件名中,然后返回一个集合(如果有)。