FilePrefixList.Any(s => FileName.StartsWith(s))
我可以在这里获得s
价值吗?我想显示匹配的字符串。
答案 0 :(得分:25)
Any
仅确定是否存在匹配项,它不会返回bool
以外的任何内容,并且需要执行查询。
您可以使用Where
或First
/ 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)
如果FilePrefixList
是List<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();