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

C#中如何动态向ListView追加ListViewSubItem?优化文件属性列的硬编码填充逻辑

解决ListView动态添加子项的硬编码问题

太棒了,你最后摸索出来的代码完全是正确的方向!直接通过item.SubItems.Add()逐个添加子项,完美解决了硬编码带来的扩展性问题。我来帮你梳理下之前的问题根源,再给点实用的优化建议:

为什么之前的Append写法没生效?

你之前尝试用subItems.Append()的方式没成功,核心原因是C#里的数组是固定长度的——Append()方法并不会修改原数组,而是返回一个包含新元素的全新数组,但你没有把这个新数组重新赋值给subItems,所以最后调用AddRange时,还是用的原来的固定长度数组,自然看不到动态添加的子项。

优化你的现有代码

你的最终代码已经很实用了,这里可以做两个小优化,让代码更高效、更简洁:

foreach (FileInfo file in nodeDirInfo.GetFiles())
{
    // 创建ListViewItem,直接指定文件名和图标索引
    var item = new ListViewItem(file.Name, 1);
    
    // 添加固定的3个子项
    item.SubItems.Add("File");
    item.SubItems.Add(file.LastAccessTime.ToShortDateString());
    item.SubItems.Add(file.FullName);
    
    // 用TryGetValue替代ContainsKey+索引,只需查询一次字典,性能更优
    if (mydict.TryGetValue(file.Name, out var fileProperties))
    {
        foreach (var prop in fileProperties)
        {
            item.SubItems.Add(prop);
        }
    }
    
    listView1.Items.Add(item);
}

关键细节说明

  • 对于不在字典中的文件,因为我们只在if块内添加动态属性,所以对应的列会自动保持空白,完全符合你的需求。
  • 务必确保你的ListView已经提前创建了足够的列(包括固定列和所有动态属性对应的列),否则超出列数的子项会无法显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:22:43