在 C# 开发中,List<T> 是最常用的数据集合之一。当我们需要对列表中的元素进行高效查找时,BinarySearch 方法是一个非常强大的工具。但默认情况下,它只能用于已按自然顺序排序的元素(如数字、字符串等)。如果我们要对自定义对象(比如学生、商品、订单等)进行二分查找,就需要使用 自定义比较器。

BinarySearch 是一种高效的查找算法,时间复杂度为 O(log n)。但它有一个前提:列表必须已经按照某种顺序排好序。否则,查找结果是不可预测的。
对于基本类型(如 int、string),List<T>.BinarySearch(item) 可以直接使用。但对于自定义类(如 Student、Product),我们需要告诉 .NET 如何比较两个对象——这就需要用到 IComparer<T> 接口。
假设我们有一个 Person 类,包含姓名和年龄:
public class Person{ public string Name { get; set; } public int Age { get; set; } public Person(string name, int age) { Name = name; Age = age; } public override string ToString() { return $"{Name} ({Age})"; }}我们要按 Age 字段进行排序和查找,因此创建一个比较器:
public class PersonAgeComparer : IComparer<Person>{ public int Compare(Person x, Person y) { if (x == null && y == null) return 0; if (x == null) return -1; if (y == null) return 1; // 按年龄升序比较 return x.Age.CompareTo(y.Age); }}这个比较器实现了 IComparer<Person> 接口,并重写了 Compare 方法。它会根据 Age 属性进行升序比较。
完整示例如下:
using System;using System.Collections.Generic;// ... 上面的 Person 和 PersonAgeComparer 类定义 ...class Program{ static void Main() { var people = new List<Person> { new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 20), new Person("Diana", 35) }; // 必须先按相同规则排序! people.Sort(new PersonAgeComparer()); // 创建一个“模板”对象用于查找(只需 Age 匹配) var searchTarget = new Person("", 30); // 使用自定义比较器进行二分查找 int index = people.BinarySearch(searchTarget, new PersonAgeComparer()); if (index >= 0) { Console.WriteLine($"找到: {people[index]}"); } else { Console.WriteLine("未找到匹配项。"); } }}注意:在调用 本文深入讲解了 C# List BinarySearch 自定义比较器 的使用方法,涵盖 C# 自定义排序比较、List<T> 二分查找教程 以及 C# IComparer 实现示例。无论你是初学者还是进阶开发者,掌握这些技巧都能让你的代码更高效、更专业。 通过实现 BinarySearch 之前,必须使用常见误区与注意事项
searchTarget 的 Name 可以为空,因为我们只按 Age 比较。SEO 关键词回顾
IComparer<T>,你可以轻松地对任何自定义对象进行排序和二分查找,大幅提升程序性能。赶快在你的项目中试试吧!
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125674.html