List.Any得到匹配的字符串

时间:2015-08-13 09:16:55

标签: c# linq lambda

FilePrefixList.Any(s => FileName.StartsWith(s))

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

5 个答案:

答案 0 :(得分: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

如果你需要知道的是{= 1}}是否匹配,那么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);  

答案 1 :(得分:15)

不是force_ssl,不是......只有 才能确定是否有任何匹配,这就是它返回Any的原因。但是,您可以将FirstOrDefault替换为谓词:

bool

如果您想查找所有匹配项,请改用var match = FilePrefixList.FirstOrDefault(s => FileName.StartsWith(s)); if (match != null) { // Display the match } else { // Nothing matched }

答案 2 :(得分:3)

如果FilePrefixListList<string>,您可以使用List<T>.Find方法:

string first = FilePrefixList.Find(s => FileName.StartsWith(s));

小提琴:List.Find vs LINQ(发现更快)

  

List<T>.Find (MSDN)返回与指定谓词定义的条件匹配的第一个元素(如果找到);否则,类型T的默认值

答案 3 :(得分:2)

Enumerable.Any()返回bool,表示任何项是否符合条件。

如果您需要匹配的项目,请改为使用SingleOrDefault()

var matchedPrefix = FilePrefixList.SingleOrDefault(s => FileName.StartsWith(s));

请参阅MSDN

答案 4 :(得分:2)

请检查试试这个: 我们假设FilePrefixList是集合列表

 class A
        {
            public int ID { get; set; }
            public string Name { get; set; }
        }

 List<A> FilePrefixList= new  List<A>();
             FilePrefixList.Add(new A
            {
                ID = 1,
                Name = "One"
            });
            FilePrefixList.Add(new A
            {
                ID =2,
                Name = "Two"
            });
            FilePrefixList.Add(new A
            {
                ID = 3,
                Name = "Three"
            });

从列表中选择数据是:

var listItems = FilePrefixList.Where(x =>x.Name.StartsWith("T")).ToList();