首页 > 后端开发 > C++ > Lambda表达式可以简化Linq的独特方法来进行自定义平等比较吗?

Lambda表达式可以简化Linq的独特方法来进行自定义平等比较吗?

Patricia Arquette
发布: 2025-01-25 22:46:13
原创
736 人浏览过

Can Lambda Expressions Simplify LINQ's Distinct Method for Custom Equality Comparisons?

用lambdas:

简化linq的Distinct:一厢情愿? linq的

方法是用于使用枚举的主食。 但是,定义不同操作的自定义平等比较通常需要使用

,这可能会感觉过于冗长。 像这个假设的例子一样,基于Lambda的超载将变得更加简洁: Distinct 基于lambda的IEqualityComparer

实用替代方案
<code class="language-csharp">var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);</code>
登录后复制
>在.NET框架中不存在这样的仅Lambda超负荷,但几种替代方案获得了相同的结果:>

1。 Distinct方法:

此方法使用

>基于键(例如,)的元素,然后从每个组中选择第一个元素。 这有效地过滤了重复。GroupBy Select

2。实现

GroupBy CustomerId

>创建实现的自定义类,提供了一个更健壮和类型的安全解决方案。 这允许根据您的特定标准明确定义的平等和哈希代码逻辑。 这通常是可维护性和性能的首选方法。
<code class="language-csharp">IEnumerable<Customer> distinctCustomers = originalList
    .GroupBy(customer => customer.CustomerId)
    .Select(group => group.First());</code>
登录后复制

3。 (强烈灰心)基于反射的比较: IEqualityComparer<T>使用反射来基于属性比较对象非常效率低下且容易出错。 除非绝对必要,否则避免使用这种方法。

缺乏仅兰巴达的过载的根本原因:IEqualityComparer<T>

正如Anders Hejlsberg所指出的那样,单独使用Lambda不足以进行

>操作。 为了一致的行为,比较被视为平等的对象还必须产生相同的哈希代码。 通过需要同时实现

>。

以上是Lambda表达式可以简化Linq的独特方法来进行自定义平等比较吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板