对象列表.找到两个具有相同名称的对象

OHA*_*OHA 2 c#

我有一个对象列表.对象有一个名字.如何在列表中找到具有相同名称的两个对象.现在我将foreach循环中的所有对象名称写入字符串列表,然后检查它们.有没有办法检查对象的相同名称而不将其写入字符串列表以检查此列表?所以我的代码看起来像这样:

List<string> objectnames = new List<string>();

foreach (object obj in DBobjects)
{
    objectnames.Add(obj.name);
}

var doublicates = objectnames.GroupBy(x => x).Where(x => x.Count() > 1 ).Select(x => x.Key);

if(doublicates.Any())
{
    foreach(string name in doublicates)
    {
        //do something with each dublicate
    }
}
Run Code Online (Sandbox Code Playgroud)

Ren*_*ogt 6

你为什么不把你的分组DBobjects:

var allDuplicates = DBobjects.GroupBy(o => o.name).Where(g => g.Count() > 1);
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以将其转换为字典映射name到具有该名称的对象列表:

var dict = allDuplicates.ToDictionary(g => g.Key, g => g.ToList());
Run Code Online (Sandbox Code Playgroud)

现在举例来说,您可以列出所有重复项:

foreach(string name in dict.Keys)
{
    Console.WriteLine($"There are {dict[name].Count} entries with name {name}:");
    foreach(var o in dict[name])
        Console.Write("    " + o.ToString());
}
Run Code Online (Sandbox Code Playgroud)