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));