想象一下,我有这段代码
public List<string> X
我加载以下项目:
launch.txt
reset.txt
FOLDERNAME
otherfoldername
我知道我可以通过调用X.Contains(“value”)来查找项目是否在该列表中 但是如果我传递“foldername / file.txt”怎么办?
检查字符串是否以X列表中的任何条目开头的最简单方法是什么? 理想情况下,我想要捕获“foldername / 。”和子目录中的所有文件,所以我想使用StartWith。
LINQ是否是正确的方法?
答案 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
等于您正在搜索的路径的目录。