首页 > 后端开发 > C++ > 如何在 C# 中使用 Lambda 表达式高效创建不同列表?

如何在 C# 中使用 Lambda 表达式高效创建不同列表?

Barbara Streisand
发布: 2025-01-25 22:51:10
原创
223 人浏览过

How Can I Efficiently Create a Distinct List Using Lambda Expressions in C#?

使用Lambda表达式定制Distinct()方法

处理可枚举对象时,经常需要区分唯一值。虽然System.Linq命名空间提供了一个Distinct()扩展方法,但它缺少一个接受Lambda表达式来指定对象相等性的重载。

难题

由于缺少基于Lambda表达式的重载,程序员只能使用IEqualityComparer接口,该接口需要实现Equals()和GetHashCode()方法。这种方法可能很繁琐且笨重。

基于Lambda表达式的变通方法

虽然没有现有的扩展方法与所需的Lambda语法匹配,但一种创造性的变通方法可以达到类似的效果。使用GroupBy()和Select(),您可以转换可枚举对象:

<code class="language-csharp">IEnumerable<customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());</code>
登录后复制

通过按指定的键对元素进行分组,并从每个组中选择第一个元素,您可以有效地根据GroupBy()中提供的Lambda表达式创建一个唯一列表。

基于Lambda表达式的相等性问题

需要注意的是,基于Lambda表达式的相等性比较器可能会导致某些类型(如字符串)出现意外行为。为了可靠地进行唯一操作,必须确保准确且一致的GetHashCode()实现。

更多见解

.NET首席架构师Anders Hejlsberg讨论了基于Lambda表达式的Distinct()重载的局限性,这是因为Distinct()内部的哈希表正常工作需要Equals()和GetHashCode()之间的兼容性。

以上是如何在 C# 中使用 Lambda 表达式高效创建不同列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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