legongju.com
我们一直在努力
2024-12-24 01:28 | 星期二

c# distinctby能处理自定义类型吗

是的,C# 的 DistinctBy 方法可以处理自定义类型。DistinctBy 是 LINQ 扩展方法,它允许你根据指定的属性或表达式对集合中的元素进行去重。为了使用 DistinctBy 处理自定义类型,你需要实现 IEquatable 接口,并在你的自定义类中重写 EqualsGetHashCode 方法。

以下是一个示例:

using System;
using System.Collections.Generic;
using System.Linq;

public class Person : IEquatable
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
            return false;

        Person person = (Person)obj;

        return Age == person.Age && string.Equals(Name, person.Name);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            int hash = 17;
            hash = hash * 23 + (Name != null ? Name.GetHashCode() : 0);
            hash = hash * 23 + Age;
            return hash;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        List people = new List
        {
            new Person("Alice", 30),
            new Person("Bob", 25),
            new Person("Alice", 30),
            new Person("Charlie", 22)
        };

        var distinctPeople = people.DistinctBy(p => p.Name);

        foreach (var person in distinctPeople)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
        }
    }
}

在这个示例中,我们创建了一个 Person 类,实现了 IEquatable 接口,并重写了 EqualsGetHashCode 方法。然后我们使用 DistinctBy 方法根据 Name 属性对 people 列表进行去重。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/53370.html

相关推荐

  • c++ static_assert与assert区别

    c++ static_assert与assert区别

    static_assert和assert都是C++中用于在编译时进行条件检查的方法,但它们之间存在一些关键区别: 静态检查与运行时检查: static_assert是在编译时进行的静态检查...

  • c++ static_assert错误信息怎样定制

    c++ static_assert错误信息怎样定制

    在C++中,static_assert允许你在编译时进行断言检查
    #include #include template void my_function(T t) { // 在这里使用你的函数实现
    } int main() {...

  • c++ static_assert作用是什么

    c++ static_assert作用是什么

    static_assert是C++11引入的一个关键字,用于在编译时期进行断言检查。它的主要作用是在代码中插入一些条件判断,如果这些条件不满足(即为假),则编译器会报错...

  • c++ static_assert怎样使用

    c++ static_assert怎样使用

    static_assert是C++11引入的一个关键字,用于在编译时期进行断言检查。如果断言失败,程序将显示错误消息并终止编译。这对于确保代码满足特定条件或约束非常有用...

  • c# stathread怎么优化

    c# stathread怎么优化

    在C#中,ThreadPool是一个用于执行后台任务的类,它可以帮助你优化多线程应用程序的性能。以下是一些建议,可以帮助你优化ThreadPool的使用: 使用Task而不是Thr...

  • c# stathread有何优势

    c# stathread有何优势

    C#中的Thread类提供了多线程编程的基本功能,它允许开发者创建和管理线程。然而,在C#中,更推荐使用Task类而不是Thread类,因为Task提供了更多的功能和优势。

  • c# stathread怎么用

    c# stathread怎么用

    在C#中,Thread类用于创建和管理线程。要使用Thread类,您需要执行以下步骤: 引入System.Threading命名空间。 using System.Threading; 创建一个Thread对象,并...

  • c# stathread是什么

    c# stathread是什么

    Thread是C#中的一个类,它表示操作系统可以调度的最小单位。这个类在System.Threading命名空间中,提供了对线程的支持和管理。
    以下是Thread类的一些主要功...