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

C#中如何复制列表?合并checkBef与check列表元素问题

嘿,这个问题很常见,我来帮你快速解决!

你现在的问题出在check.Add(checkBef.)这行代码——List<T>.Add()方法是用来添加单个元素的,而你要添加的是一整个List<ListBoxArticle>集合,所以得用AddRange()方法才行,它能一次性把集合里的所有元素追加到目标列表末尾。

修正后的代码

List<ListBoxArticle> check = new List<ListBoxArticle>();
private void SelectArt_Checked(object sender, RoutedEventArgs e)
{
    List<ListBoxArticle> checkBef = LesArticles.Where(x => x.IsChecked == true).ToList();
    // 用AddRange替代Add,一次性添加checkBef的所有元素
    check.AddRange(checkBef);
}

额外说明

  1. 如果需要替换而非追加:要是你希望每次触发事件时,check完全变成当前选中的checkBef(清空原有内容再添加新元素),可以加上Clear():
private void SelectArt_Checked(object sender, RoutedEventArgs e)
{
    List<ListBoxArticle> checkBef = LesArticles.Where(x => x.IsChecked == true).ToList();
    check.Clear(); // 先清空原有元素
    check.AddRange(checkBef);
}
  1. 深拷贝注意事项:如果ListBoxArticle是引用类型,上面的代码只是复制了对象引用(修改check里的元素会影响原checkBef的元素)。如果需要完全独立的对象,你得手动创建新实例并复制属性:
check.AddRange(checkBef.Select(item => new ListBoxArticle 
{
    // 这里复制你的ListBoxArticle的所有属性
    Id = item.Id,
    Title = item.Title,
    IsChecked = item.IsChecked
    // 其他属性按需添加
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:02