首页 > 后端开发 > C++ > lambda表达式可以直接与`dimption()`在c#中使用吗?

lambda表达式可以直接与`dimption()`在c#中使用吗?

Patricia Arquette
发布: 2025-01-25 22:56:12
原创
776 人浏览过

C# 中的 Distinct() 方法与 Lambda 表达式:替代方法探索

System.Linq 中的 Distinct() 扩展方法提供了一种方便的方法来从可枚举对象中过滤掉重复元素。虽然在简单情况下可以不带参数使用,但它需要一个 IEqualityComparer 实例来确定对象的相等性。这可能很麻烦,尤其是在使用 lambda 表达式时。

Distinct() 是否有接受 lambda 表达式的重载?以下是实现方法:

自定义扩展方法

您可以定义自己的扩展方法,该方法采用 lambda 表达式来比较元素:

<code class="language-csharp">public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> source, Func<T, TKey> keySelector)
{
    return source.GroupBy(keySelector).Select(group => group.First());
}</code>
登录后复制

用法:

<code class="language-csharp">var distinctValues = myCustomerList.DistinctBy(customer => customer.CustomerId);</code>
登录后复制

内联 IEqualityComparer

虽然无法直接内联指定 IEqualityComparer,但可以使用自定义比较器类作为变通方法:

<code class="language-csharp">public class CustomerEqualityComparer : IEqualityComparer<Customer>
{
    public bool Equals(Customer x, Customer y)
    {
        return x.CustomerId == y.CustomerId;
    }

    public int GetHashCode(Customer obj)
    {
        return obj.CustomerId.GetHashCode();
    }
}</code>
登录后复制

用法:

<code class="language-csharp">var equalityComparer = new CustomerEqualityComparer();
var distinctValues = myCustomerList.Distinct(equalityComparer);</code>
登录后复制

Anders Hejlsberg 的解释

C# 语言设计者 Anders Hejlsberg 已经解决了这个问题。他解释说,定义一个接受 lambda 表达式的 Distinct() 重载在技术上具有挑战性,因为如果要使对象在内部哈希表中正常工作,则相等的元素必须具有相同的 GetHashCode 返回值。因此,必须使用 IEqualityComparer

Can Lambda Expressions Be Used Directly with `Distinct()` in C#?

以上是lambda表达式可以直接与`dimption()`在c#中使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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