迭代实现公共接口的对象列表

时间:2014-12-27 22:41:13

标签: c# c#-4.0 foreach interface

我有一个由多个对象共享的接口,定义如下:

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()); }
}

但是我得到一个关于最好的重载方法匹配有一些无效参数的错误。

1 个答案:

答案 0 :(得分:1)

这是一个差异问题 - 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()); }
}