有没有办法在不知道该值的情况下按公共 属性 值对所有对象进行分组?

Is there a way to group all object by a common property value, without knowing that value?

如果我有一个 House 对象,我想将所有颜色相同的对象分组,有没有办法在不知道实际颜色的情况下做到这一点?

例如

房子 颜色
房子A 黄色
房子B 绿色
房子C 黄色
房子D 绿色

在这种情况下,HouseA 和 HouseC 将被分组到 1 个列表中,而 HouseB 和 HouseD 将被分组到另一个列表中。

如何在不知道颜色的情况下对这些房子进行分组?

简单,使用 GroupBy LINQ 方法,如下所示:

List<House> houses = ... // Your houses here
var grouped = houses.GroupBy(x => x.Color);

// grouped is an'IEnumerable<IGrouping<string, House>>' and you can access the properties like so:

foreach (var grouping in grouped)
{
    Console.WriteLine(grouping.Key);
    foreach (var house in grouping)
        Console.WriteLine(house.Name);
}

IGrouping<TKey, TElement> 文档。

相反,如果您想将其转换为字典以便快速轻松地查找,您也可以像这样轻松地执行此操作:

Dictionary<string, List<House>> housesByColor = grouped.ToDictionary(k => k.Key, v => v.ToList());

看看我的demo