0

想象一下我有这个代码

public List<string> X

我加载以下项目:

launch.txt
reset.txt 文件夹名 其他文件

我知道我可以通过调用 X.Contains("value") 来查找某个项目是否在该列表中,
但是如果我通过“foldername/file.txt”会怎样。

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

LINQ 是正确的方法吗?

4

2 回答 2

4

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

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

当然,StartsWith实际上可能并不适合您的场景。如果只有一个名为foldername2in的文件夹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));
于 2013-07-10T21:42:25.573 回答
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等于您正在搜索的路径的目录。

于 2013-07-10T22:04:22.663 回答