【问题标题】:I am getting System.Collections.Generic.List`1[ConsoleApp1.Program.Employee] instead of the list's contents? c#我得到 System.Collections.Generic.List`1[ConsoleApp1.Program.Employee] 而不是列表的内容? C#
【发布时间】:2021-08-20 13:51:38
【问题描述】:
class Employee
      {
         public string Name{get;set;}
         public int Age{get;set;}
         public int ID{get;set;}
      }

      static void Main(string[] args)
      {
        List<Employee> EmployeeList = new();

        EmployeeList.Add(new Employee() { Name = "Luís", Age = 19, ID = 1 });
        EmployeeList.Add(new Employee() { Name = "Sofia", Age = 25, ID = 2 });
        EmployeeList.Add(new Employee() { Name = "Gilberto", Age = 57, ID = 3 });
        EmployeeList.Add(new Employee() { Name = "Manuel", Age = 25, ID = 4 });
        EmployeeList.Add(new Employee() { Name = "Sofia", Age = 25, ID = 2 });


        var EmployeeDic = EmployeeList.GroupBy(i => i.Age).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
        
        foreach (var emp in EmployeeDic)
        {
                Console.WriteLine("" + emp.Key + emp.Value);
        }
        Console.ReadKey();}

我做了很多研究,无法得到价值,关键是员工的年龄。接下来我可以尝试什么?

【问题讨论】:

  • emp.Value 是一个List&lt;Employee&gt;,如果你这样做new List&lt;Employee&gt;().ToString(),你会得到你看到的输出。也许你想遍历emp.Value(这是一个Employee)中的每个元素,然后打印出来?
  • “我无法获得价值” 根据您的代码,您希望获得什么价值? EmployeeDic 是一本字典。字典键的类型是什么?因此,emp.Key 应该包含什么类型?字典值的类型是什么?那么emp.Value应该包含什么类型呢?
  • 字典的键将是年龄,因为 groupby 并且那是有效的,emp.value 包含一个列表,我找不到循环 emp.value 以获取例如名称的方法员工。
  • @tommy:所以你知道emp.ValueList&lt;Employee&gt;。你如何遍历一个列表?我提出这个问题是因为自己找到答案具有更大的教育价值。 (1) 查找如何遍历列表 (2) emp.Value 是一个列表,因此您可以遍历它 (3) 以您希望的方式处理列表的每个元素 (Employee)。

标签: c# list dictionary


【解决方案1】:
var EmployeeDic = EmployeeList.GroupBy(i => i.Age).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());

该行按年龄创建lists 个员工。具体来说是 19 岁的员工名单,然后是 25 岁的员工名单,最后是 57 岁的员工名单。

foreach (var emp in EmployeeDic)

该行循环遍历列表。

Console.WriteLine("" + emp.Key + emp.Value);

该行然后输出有关列表的信息。这不是代码的预期行为,因此输出没有帮助。


解决方案是保留围绕列表循环的代码,但在其中有另一个循环,该循环遍历该列表中的每个员工。

像这样:(用这个替换你的循环)

foreach (var empList in EmployeeDic)
{
    Console.WriteLine("Age {0}", empList.Key);
    foreach (var emp in empList.Value)
    {
        Console.WriteLine("\t{0} has an ID of {1}", emp.Name, emp.ID);
    }
}

输出是:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 2019-05-13
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多