如何将IList<KeyValuePair<long, string>>类型集合追加到另一同类型集合
解决方案
问题根源:AddRange() 是 List<T> 类独有的方法,你当前 Assessments1 是用 IList<T> 接口声明的,接口层面没有定义这个方法,所以无法直接调用。以下是3种可落地的实现方案:
方案1:遍历逐个添加(最通用,无依赖)
直接循环 Assessments2 中的每一项,调用 IList<T> 自带的 Add() 方法追加即可,兼容性最好,不管 Assessments1 实际是哪种 IList<T> 实现都可以正常运行:
foreach (var item in Assessments2) { Assessments1.Add(item); }
方案2:强转后调用AddRange(性能最优)
你代码里 Assessments1 的实际实例就是 List<KeyValuePair<long, string>> 类型,可以安全强转之后调用原生 AddRange 方法,性能比逐个添加更高:
((List<KeyValuePair<long, string>>)Assessments1).AddRange(Assessments2);
注意:该方案只适合明确知道 IList 实际类型是 List<T> 的场景,避免强制转换抛出异常。
方案3:自定义扩展方法(适合多次复用场景)
如果项目里有多处需要给 IList<T> 批量添加元素的需求,可以自己封装一个扩展方法,一劳永逸:
public static class ListExtensions { public static void AddRange<T>(this IList<T> list, IEnumerable<T> items) { if (list == null) throw new ArgumentNullException(nameof(list)); if (items == null) throw new ArgumentNullException(nameof(items)); foreach (var item in items) { list.Add(item); } } }
封装完成后就可以直接像调用List原生方法一样使用:
Assessments1.AddRange(Assessments2);
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

