c# - Lambda 表达式未按预期运行

标签 c# .net lambda

我正在尝试构建一个 lambda 表达式,它将一个数组的元素与第二个数组的元素进行匹配。以下是此查询的简化版本:

class Program
{
    static void Main(string[] args)
    {
        string[] listOne = new string[] { "test1", "test2", "test3" };
        MyClass[] listTwo = new MyClass[] { new MyClass("test1") };

        string[] newVals = listOne.Where(p => listTwo.Select(e => e.Name).Equals(p)).ToArray();

        //string[] newVals2 = listOne.Intersect(listTwo.Select(t => t.Name)).ToArray();
    }

    class MyClass
    {
        public MyClass(string name)
        {
            Name = name;
        }
        public string Name {get; set;}
    }
}

我希望 newVals 返回一个值为 1 的数组,但它是空的。我意识到取消注释 myVals2 会获得相同的结果,但类列表的根本差异比显示的要大。

最佳答案

您正在使用 Equals但你应该使用 Contains .您正在检查是否IEnumerable<>等于p , 但你想检查是否 IEnumerable<>包含 p ,所以替换:

string[] newVals = listOne.
                   Where(p => listTwo.Select(e => e.Name).Equals(p)).
                   ToArray();

string[] newVals = listOne.
                   Where(p => listTwo.Select(e => e.Name).Contains(p)).
                   ToArray();

关于c# - Lambda 表达式未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14525706/

相关文章:

.net - 混合使用Web API Controller 和站点 Controller

c# - Dispatcher 的实用性和良好实践

.net - WCF:如何检测到 WCF PerSession 服务的新连接?

python - lambda可以有多个返回

c# - MySql 更新查询在 asp.net 中不起作用

c# - 将缓存项转换为特定对象类型以供 web 方法返回

c# - 业务逻辑层是否需要自己的模型

c# - SSIS脚本组件输入

c# - 按模型分组并选择模型

c# - 奇怪的 lambda 行为