IReadOnlyList <t>到BindingList

时间:2016-05-11 08:19:32

标签: c# list

我正在尝试将我IReadOnlyList课程的Material绑定到ComboBox,但我找不到办法使其有效。

var bList = new BindingList<Material>(listToBind);

这给了我Argument type 'System.Collections.Generic.IReadOnlyList<Data.Material>' is not assignable to parameter type 'System.Collections.Generic.IList<Data.Material>'

我是否需要将其投射到IList或者还有其他方法可以实现此目标吗?

2 个答案:

答案 0 :(得分:2)

BindingList<T>没有构造函数,它接受IReadOnlyList扩展的任何接口。

BindingList<T>有两个构造函数(MSDN docs),一个是空的,另一个是IList<T>。但是,IReadOnlyList<T>扩展了IEnumerable<T>,这意味着它提供的函数.ToList()为我们提供了List<T>,我们可以使用它来填充BindingList<T>

最终代码如下所示:

var bList = new BindingList<Material>(listToBind.ToList());

答案 1 :(得分:0)

在MSDN中:

  

的BindingList(IList的)
  使用指定的列表初始化BindingList类的新实例。

所以你需要一个实现IList的对象; IReadOnlyList没有。

您可以使用以下代码获得所需内容:

var bList = new BindingList<Material>(listToBind.ToList());