循环访问实现通用接口的对象列表

本文关键字:对象 列表 接口 访问 实现 循环 | 更新日期: 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()); }
}