List.Any得到匹配的字符串

San*_*yak 16 c# linq lambda

FilePrefixList.Any(s => FileName.StartsWith(s))
Run Code Online (Sandbox Code Playgroud)

我可以s在这里获得价值吗?我想显示匹配的字符串.

Tim*_*ter 25

Any仅确定是否存在匹配,它不返回除了之外的任何内容,bool并且它需要执行查询.

你可以使用WhereFirst/ FirstOrDefault:

string firstMastch = FilePrefixList.FirstOrDefault(s => FileName.StartsWith(s)); // null if no match

var allMatches = FilePrefixList.Where(s => FileName.StartsWith(s));
string firstMastch = allMatches.FirstOrDefault(); // null if no match
Run Code Online (Sandbox Code Playgroud)

Any如果所有你需要知道的是否匹配,那么很好,否则你可以FirstOrDefault用来获得第一场比赛或null(如果是参考类型).

由于Any需要执行查询,因此效率较低:

string firstMatch = null;
if(FilePrefixList.Any(s => FileName.StartsWith(s)))
{
    // second execution
    firstMatch = FilePrefixList.First(s => FileName.StartsWith(s));
}
Run Code Online (Sandbox Code Playgroud)

如果您想将所有匹配项放入单独的集合中,如List<string>:

List<string> matchList = allMatches.ToList(); // or ToArray()
Run Code Online (Sandbox Code Playgroud)

如果要输出所有匹配项,可以使用String.Join:

string matchingFiles = String.Join(",", allMatches);  
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 15

没有Any,没有......这只是为了确定是否有任何匹配,这就是它返回的原因bool.但是,您可以使用FirstOrDefault谓词:

var match = FilePrefixList.FirstOrDefault(s => FileName.StartsWith(s));
if (match != null)
{
    // Display the match
}
else
{
    // Nothing matched
}
Run Code Online (Sandbox Code Playgroud)

如果要查找所有匹配项,请Where改用.