C# 列表。任何匹配的字符串

C# 列表。任何匹配的字符串,c#,linq,lambda,C#,Linq,Lambda,我可以在这里获得s值吗?我想显示匹配的字符串。Any仅确定是否存在匹配,它不会返回除bool之外的任何内容,并且需要执行查询 您可以使用Where或First/First或default: FilePrefixList.Any(s => FileName.StartsWith(s)) 因此,如果您只需要知道是否存在匹配项,Any就可以了,否则您可以使用FirstOrDefault获取第一个匹配项或null(对于引用类型) 由于Any需要执行查询,因此效率较低: string firstM

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

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

您可以使用
Where
First
/
First或default

FilePrefixList.Any(s => FileName.StartsWith(s))
因此,如果您只需要知道是否存在匹配项,
Any
就可以了,否则您可以使用
FirstOrDefault
获取第一个匹配项或
null
(对于引用类型)

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

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
如果要将所有匹配项放入一个单独的集合(如
列表)


不带任何,不带。。。这只是为了确定是否有匹配项,这就是它返回
bool
的原因。但是,您可以与谓词一起使用:

string matchingFiles = String.Join(",", allMatches);  
如果要查找所有匹配项,请改用
Where

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

如果需要匹配的项,请改用
SingleOrDefault()

var match = FilePrefixList.FirstOrDefault(s => FileName.StartsWith(s));
if (match != null)
{
    // Display the match
}
else
{
    // Nothing matched
}
请检查并尝试以下操作: 我们假设FilePrefixList是collectionlist

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

如果
FilePrefixList
是一个
列表
,则可以使用
List.Find
方法:

var listItems = FilePrefixList.Where(x =>x.Name.StartsWith("T")).ToList();
提琴:(寻找更快)

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


请注意,如果有多个结果,SingleOrDefault将抛出异常。@Serv,是的,但是由于列表应该包含文件前缀,我假设不会有重复的。我甚至没有分析这些信息。很可能是。@haim770:但还要注意,
Single
的效率低于
First
。它需要检查是否存在第二个匹配,该匹配要么抛出异常,要么检查整个序列的每个项。可以使Linq与对象之间产生重大差异。如果要确保只有一个匹配项,还可以使用Single()。
var matchedPrefix = FilePrefixList.SingleOrDefault(s => FileName.StartsWith(s));
 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();
string first = FilePrefixList.Find(s => FileName.StartsWith(s));