You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 遍历字符串数组对比对象列表值及Lambda实现的最佳方式?

你提供的原有代码存在语法错误:allFolks是List<Folks>类型的集合,本身没有Name属性,Name是集合内单个Folks实例的属性,所以直接调用allFolks.Name会编译失败。

首先请确保你已经引入了LINQ命名空间,后续方案都需要依赖该命名空间:
using System.Linq;

1. 基础Lambda实现(和原有逻辑对齐)

可以用LINQ的Any()方法搭配Lambda表达式完成匹配判断,代码如下:

var allFolks = Folks.GetAll();
string[] enteredNames = Array.ConvertAll(inputNames.Text.Split(','), p => p.Trim());

foreach (var eName in enteredNames)
{
    // Lambda表达式f => f.Name == eName用于匹配符合条件的Folks实例
    if (!allFolks.Any(f => f.Name == eName))
    {
        throw new Exception("Name not found");
    }
}

如果需要忽略大小写对比姓名,可以把判断条件改成f.Name.Equals(eName, StringComparison.OrdinalIgnoreCase),避免大小写不同导致匹配失败。

2. 更简洁的无循环写法

如果不想显式写foreach循环,可以用LINQ的All()方法,一行完成所有姓名的校验:

if (!enteredNames.All(eName => allFolks.Any(f => f.Name == eName)))
{
    throw new Exception("Name not found");
}

3. 大数据量下的性能优化方案

如果allFolks的元素数量较多,或者需要频繁做姓名匹配,建议提前把所有姓名提取为HashSet,把匹配的时间复杂度从O(n)降低到O(1),大幅提升性能:

// 提前构建姓名的哈希集合
var existingNameSet = new HashSet<string>(allFolks.Select(f => f.Name));

foreach (var eName in enteredNames)
{
    if (!existingNameSet.Contains(eName))
    {
        throw new Exception("Name not found");
    }
}

你问的Lambda表达式完全可以用于该场景,上面所有方案里=>标识的匿名函数都是Lambda表达式的用法。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:06:03