我有一个由多个对象共享的接口,定义如下:
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()); }
}
但是我得到一个关于最好的重载方法匹配有一些无效参数的错误。
答案 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()); }
}