想象一下我有这样的代码
public List<string> X我装载下列物品:
launch.txt reset.txt 民歌名 异类名称
我知道我可以通过调用X.Contains("value")来查找列表中的某一项。
但是如果我传递"foldername/file.txt“呢?
检查字符串是否以X列表中的任何条目开头最简单的方法是什么?理想情况下,我希望捕获“foldername/”中的所有文件。子目录也是如此,所以我想使用StartWith。
LINQ是解决这个问题的正确方法吗?
发布于 2013-07-10 21:42:25
使用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));发布于 2013-07-10 22:04:22
如果您正在摆弄路径,请使用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等于正在搜索的路径的目录。
https://stackoverflow.com/questions/17581374
复制相似问题