You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对多个不同类型对象的Age属性统一排序并实现通用方法

方案1:定义公共接口(推荐,类型安全,扩展性强)

这种方案适合后续需要保留原对象实例、或者需要扩展更多公共属性的场景,只要新增类型实现统一接口即可,无需修改排序逻辑。

首先定义包含Age属性的公共接口:

public interface IHasAge
{
    int Age { get; }
}

修改原有类实现该接口:

public class Person : IHasAge
{
    public int Age { get; set; }
    // 原有其他属性、方法保留不变
}

public class Dog : IHasAge
{
    public int Age { get; set; }
    // 原有其他属性、方法保留不变
}

// 后续新增Cat、Bird等类型,只要实现IHasAge接口即可

合并所有对象后统一排序提取Age:

List<Person> personList = new List<Person>
{
    new Person { Age = 77 },
    new Person { Age = 88 },
    new Person { Age = 1001 },
    new Person { Age = 755 }
};

List<Dog> dogList = new List<Dog>
{
    new Dog { Age = 1 },
    new Dog { Age = 9 },
    new Dog { Age = 10 },
    new Dog { Age = 8 }
};

// 合并所有实现了IHasAge的对象列表
List<IHasAge> allAgeObjects = new List<IHasAge>();
allAgeObjects.AddRange(personList);
allAgeObjects.AddRange(dogList);
// 后续新增其他类型列表,直接AddRange对应列表即可,无需修改排序逻辑

// 排序并提取Age
var sortedAges = allAgeObjects.OrderBy(obj => obj.Age).Select(obj => obj.Age);

// 输出结果:1 8 9 10 77 88 755 1001
Console.WriteLine(string.Join(" ", sortedAges));

方案2:直接提取Age值合并排序(无需修改原有类)

如果不需要保留原对象实例,也不想修改原有类的定义,可以直接提取所有列表的Age值合并后排序,代码更轻便:

List<int> allAges = new List<int>();
// 逐个提取各列表的Age属性
allAges.AddRange(personList.Select(p => p.Age));
allAges.AddRange(dogList.Select(d => d.Age));
// 后续新增其他类型列表,仅需加一行AddRange提取Age即可

allAges.Sort();

// 输出结果:1 8 9 10 77 88 755 1001
Console.WriteLine(string.Join(" ", allAges));

内容的提问来源于stack exchange,提问作者mightycode Newton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:39:03