如何在 C# 控制台应用程序中显示模型列表

How to display a list of a model in a C# console application

我是 C# 的新手,我一直在努力做到以下几点: 我正在尝试在控制台应用程序中列出一个列表,我有一个名为“TeamModel”的模型

public class TeamModel
{
    public int Id { get; set; }
    public string TeamName { get; set; }
    public List<PersonModel> TeamMembers { get; set; } = new List<PersonModel>();

    public TeamModel()
    {

    }
}

在我的主要 class 我有以下内容:

class Program 
{
    static void Main(string[] args)
    {
        List<TeamModel> TeamOne   = new List<TeamModel>(){new TeamModel() { Id =1, TeamName = "x's Team", TeamMembers  = null}};
        List<TeamModel> TeamTwo   = new List<TeamModel>(){new TeamModel() { Id =2, TeamName = "y's Team", TeamMembers  = null}};
        List<TeamModel> TeamThree = new List<TeamModel>(){new TeamModel() { Id =3, TeamName = "z's Team", TeamMembers  = null}};

        List<List<TeamModel>> listOfTeams = new List<List<TeamModel>> (){TeamOne,TeamTwo,TeamThree};

        foreach (List<TeamModel> list in listOfTeams) 
        {
            Console.WriteLine(list);
        }
    }
}

现在,当我 运行 程序时,我希望结果是:

1,x的团队,
2,y的团队,
3,z的团队

我得到的是

System.Collections.Generic.List`1[TeamModel]  
System.Collections.Generic.List`1[TeamModel]  
System.Collections.Generic.List`1[TeamModel]

如果我将 foreach 更改为:

foreach (List<TeamModel> list in listOfTeams) 
{
    Console.WriteLine(String.Join(", ", list));
}

我明白了:

团队模型
团队模型
团队模型

您可以使用

来实现
foreach (List<TeamModel> list in listOfTeams) 
{
  foreach (var team in list)
  {
     Console.WriteLine(team.Id + " " + team.Name);
  }
} 

使用 Linq

您可以使用 .SelectMany() 展平嵌套列表,然后您可以遍历展平列表或者将其转换为字符串列表然后打印。

Projects each element of a sequence to an IEnumerable and flattens the resulting sequences into one sequence.

var strTeamDetails =  listOfTeams
         .SelectMany(teams => teams)  //Flatten the List.
         .Select(individualTeam => $"{individualTeam.Id} {individualTeam.Name}");  //Convert to IEnumearable of string

Console.WriteLine(string.Join(",\n", strTeamDetails)); //Print

您可能需要为您的团队模型考虑 overriding the ToString() 方法 class;

来自上面的link;

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

    public override string ToString()
    {
        return "Person: " + Name + " " + Age;
    }
}

您可以测试 ToString 方法,如以下代码示例所示:

Person person = new Person { Name = "John", Age = 12 };
Console.WriteLine(person);
// Output:
// Person: John 12

考虑到每个“列表”都包含一个团队,是否有理由将 TeamOne、TeamTwo 和 TeamThree 创建为列表?以下实现将实现您所说的预期输出:

static void Main(string[] args)
{
    TeamModel TeamOne = new TeamModel { Id = 1, TeamName = "x's Team", TeamMembers = null };
    TeamModel TeamTwo = new TeamModel { Id = 2, TeamName = "y's Team", TeamMembers = null };
    TeamModel TeamThree = new TeamModel { Id = 3, TeamName = "z's Team", TeamMembers = null };

    List<TeamModel> listOfTeams = new List<TeamModel> { TeamOne, TeamTwo, TeamThree };

    foreach (TeamModel team in listOfTeams)
    {
         Console.WriteLine($"{team.Id}. {team.TeamName}");
    }
}

如果您真的需要一个列表列表,那么下面的实现就可以了。与您自己的解决方案的唯一区别是在您拥有的解决方案中多了一个 foreach

static void Main(string[] args)
{
    List<TeamModel> TeamOne = new List<TeamModel>() { new TeamModel() { Id = 1, TeamName = "x's Team", TeamMembers = null } };
    List<TeamModel> TeamTwo = new List<TeamModel>() { new TeamModel() { Id = 2, TeamName = "y's Team", TeamMembers = null } };
    List<TeamModel> TeamThree = new List<TeamModel>() { new TeamModel() { Id = 3, TeamName = "z's Team", TeamMembers = null } };

    List<List<TeamModel>> listOfTeams = new List<List<TeamModel>>() { TeamOne, TeamTwo, TeamThree };

    foreach (List<TeamModel> list in listOfTeams)
    {
        foreach (TeamModel team in list)
        {
            Console.WriteLine($"{team.Id}. {team.TeamName}");
        }
    }
}