温馨提示×

c# compare自定义比较

c#
小樊
93
2024-09-19 19:45:24
栏目: 编程语言

在C#中,可以使用自定义比较器(Comparer)来比较自定义对象。自定义比较器需要实现IComparer接口或继承Comparer类。以下是使用自定义比较器的示例:

  1. 实现IComparer接口:
using System;

public class CustomComparer : IComparer
{
    private readonly string _propertyToCompare;

    public CustomComparer(string propertyToCompare)
    {
        _propertyToCompare = propertyToCompare;
    }

    public int Compare(object x, object y)
    {
        // 获取x和y的自定义属性值
        var valueX = GetPropertyValue(x, _propertyToCompare);
        var valueY = GetPropertyValue(y, _propertyToCompare);

        // 比较属性值并返回结果
        return string.Compare(valueX, valueY, StringComparison.OrdinalIgnoreCase);
    }

    private static object GetPropertyValue(object obj, string propertyName)
    {
        var propertyInfo = obj.GetType().GetProperty(propertyName);
        return propertyInfo.GetValue(obj, null);
    }
}
  1. 使用自定义比较器:
using System;
using System.Collections;

public class CustomObject
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        // 创建自定义对象列表
        var objects = new ArrayList
        {
            new CustomObject { Name = "Alice", Age = 30 },
            new CustomObject { Name = "Bob", Age = 25 },
            new CustomObject { Name = "Charlie", Age = 35 }
        };

        // 使用自定义比较器对对象列表进行排序
        objects.Sort(new CustomComparer("Name"));

        // 输出排序后的对象列表
        foreach (var obj in objects)
        {
            Console.WriteLine($"Name: {obj.Name}, Age: {obj.Age}");
        }
    }
}

在这个示例中,我们创建了一个名为CustomComparer的自定义比较器,用于比较CustomObject对象的Name属性。然后,我们使用这个比较器对CustomObject对象列表进行排序。

0