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

C#集合按Level统计对象数并格式化输出至列表框/文本框

解决方案

实现要点

  • 用LINQ的GroupBy按Level分组,同时按层级升序排序
  • 借助字符串固定宽度占位符实现列对齐,避免内容错位
  • 将生成的文本批量输出到ListBox或TextBox控件

完整代码示例

// 先确保Galaxy类已定义
public class Galaxy
{
    public string Name { get; set; }
    public int MegaLightYears { get; set; }
    public int Level { get; set; }
}

// 核心处理逻辑
var theGalaxies = new List<Galaxy>
{
    new Galaxy() { Name="Tadpole", MegaLightYears=400, Level=1},
    new Galaxy() { Name="Pinwheel", MegaLightYears=25, Level=1},
    new Galaxy() { Name="Milky Way", MegaLightYears=0, Level=2},
    new Galaxy() { Name="Andromeda", MegaLightYears=3, Level=3}
};

// 按Level分组并按层级排序
var groupedGalaxies = theGalaxies.GroupBy(g => g.Level)
                                 .OrderBy(g => g.Key);

// 构建输出内容集合
var outputLines = new List<string>();
// 添加格式化表头
outputLines.Add(string.Format("{0,-12}{1,-18}{2}", "Name", "MegaLightYears", "Level"));

foreach (var group in groupedGalaxies)
{
    // 输出当前层级的所有星系
    foreach (var galaxy in group)
    {
        outputLines.Add(string.Format("{0,-12}{1,-18}{2}", galaxy.Name, galaxy.MegaLightYears, galaxy.Level));
    }
    // 输出层级统计结果
    var countDesc = group.Count() == 1 ? "1 galaxy" : $"{group.Count()} galaxies";
    outputLines.Add($"{countDesc} in Level {group.Key}");
}

// 输出到ListBox(需确保控件已在窗体中定义)
listBox1.Items.AddRange(outputLines.ToArray());

// 如果输出到TextBox,需先设置Multiline属性为true
// textBox1.Lines = outputLines.ToArray();

关键细节说明

  • 分组排序:GroupBy(g => g.Level)完成层级分组,OrderBy(g => g.Key)保证层级按数字从小到大展示
  • 对齐处理:{0,-12}这类格式符表示左对齐且占用12个字符宽度,不同长度的内容会自动补空格,避免错位
  • 控件输出:ListBox用AddRange批量添加效率更高;TextBox必须开启多行模式才能完整显示所有内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:10:20