循环访问实现通用接口的对象列表
本文关键字:对象 列表 接口 访问 实现 循环 | 更新日期: 2023-09-27 18:35:30
我有一个由多个对象共享的接口,定义如下:
public interface IConvertibleToListItem
{
ListViewItem toListItem();
}
我有共享此接口的对象列表。我希望能够做到这一点:
refreshList(newsListView, _news);
private void refreshList(ListView lv, List<IConvertibleToListItem> items)
{
lv.Items.Clear();
foreach (IConvertibleToListItem item in items) { lv.Items.Add(item.toListItem()); }
}
但是我收到一个错误,关于最佳重载方法匹配有一些无效参数。
这是一个方差问题 - List<News>
与List<IConvertibleToListItem>
不兼容。对于您的方法,您可以使用IEnumerable<IConvertibleToListItem>
因为您只是迭代集合:
private void refreshList(ListView lv, IEnumerable<IConvertibleToListItem> items)
{
lv.Items.Clear();
foreach (IConvertibleToListItem item in items) { lv.Items.Add(item.toListItem()); }
}
如果出于某种原因需要使用List
则可以使方法泛型:
private void refreshList<T>(ListView lv, List<T> items)
where T : IConvertibleToListItem
{
lv.Items.Clear();
foreach (IConvertibleToListItem item in items) { lv.Items.Add(item.toListItem()); }
}