字符串列表 - 部分条目StartsWith使用LINQ

时间:2013-07-10 21:40:20

标签: c#

想象一下,我有这段代码

public List<string> X

我加载以下项目:

  

launch.txt
  reset.txt
  FOLDERNAME
  otherfoldername

我知道我可以通过调用X.Contains(“value”)来查找项目是否在该列表中 但是如果我传递“foldername / file.txt”怎么办?

检查字符串是否以X列表中的任何条目开头的最简单方法是什么? 理想情况下,我想要捕获“foldername / ”和子目录中的所有文件,所以我想使用StartWith。

LINQ是否是正确的方法?

2 个答案:

答案 0 :(得分:3)

使用Enumerable.Any扩展方法,当且仅当给定谓词返回true的序列中有某个项时,才会返回true

string search = "foldername/file.txt";
bool result = X.Any(s => search.StartsWith(s));

当然,StartsWith可能实际上并不适合您的方案。如果foldername2中只有名为X的文件夹,该怎么办?在这种情况下,我不希望result成为true,我怀疑。


如果您想获取X中与搜索匹配的项目,您可以执行以下操作。

string search = "foldername/file.txt";
IEnumerable<string> result = X.Where(s => search.StartsWith(s));

如果您想让X中与搜索匹配的第一项,您可以执行以下操作。

string search = "foldername/file.txt";
string result = X.FirstOrDefault(s => search.StartsWith(s));

答案 1 :(得分:0)

如果您正在摆弄路径,请使用Path课程:

List<string> X = new List<string>(){
    "launch.txt","reset.txt","foldername","otherfoldername"    
};
string search = "foldername/file.tx";
var searchInfo = new
{
    FileNameWoe = Path.GetFileNameWithoutExtension(search),
    FileName = Path.GetFileName(search),
    Directory = Path.GetDirectoryName(search)
};

IEnumerable<String> matches = X.Select(x => new
{
    str = x,
    FileNameWoe = Path.GetFileNameWithoutExtension(x),
    FileName = Path.GetFileName(x),
    Directory = Path.GetDirectoryName(x)
}).Where(xInfo => searchInfo.FileName    == xInfo.FileNameWoe
               || searchInfo.FileNameWoe == xInfo.FileName
               || searchInfo.Directory   == xInfo.Directory
               || searchInfo.Directory   == xInfo.FileNameWoe
               || searchInfo.FileNameWoe == xInfo.Directory)
.Select(xInfo => xInfo.str)
.ToList();

查找:foldername因为其中一个文件名FileNameWithoutExtension等于您正在搜索的路径的目录。