List.Any如何获得匹配的字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)
FilePrefixList.Any(s => FileName.StartsWith(s))

我能不能获得s这里的值?我想显示匹配的字符串。

提问于
用户回答回答于

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

Any如果你需要知道的是如果它是一个匹配,那么很好,否则你可以FirstOrDefault用来获得第一个匹配或者null(在引用类型的情况下)。

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

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

如果你想把所有的匹配放到一个单独的集合中,如List<string>

List<string> matchList = allMatches.ToList(); // or ToArray()

如果你想输出所有可以使用的匹配项String.Join

string matchingFiles = String.Join(",", allMatches);  
用户回答回答于

不能用Any,意味着确定是否有任何匹配,这就是它返回的原因bool。但是,可以使用FirstOrDefault谓词来代替:

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

扫码关注云+社区