Reputation: 878
I have an interface shared by several objects, defined as so:
public interface IConvertibleToListItem
{
ListViewItem toListItem();
}
I have lists of objects that share this interface. I want to be able to do this:
refreshList(newsListView, _news);
private void refreshList(ListView lv, List<IConvertibleToListItem> items)
{
lv.Items.Clear();
foreach (IConvertibleToListItem item in items) { lv.Items.Add(item.toListItem()); }
}
But I get an error about the best overloaded method match having some invalid arguments.
Upvotes: 0
Views: 1005
Reputation: 144136
This is a variance problem - List<News>
is not compatible with List<IConvertibleToListItem>
. For your method you can use IEnumerable<IConvertibleToListItem>
since you are only iterating over the collection:
private void refreshList(ListView lv, IEnumerable<IConvertibleToListItem> items)
{
lv.Items.Clear();
foreach (IConvertibleToListItem item in items) { lv.Items.Add(item.toListItem()); }
}
if for some reason you need to use a List
you can make your method generic:
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()); }
}
Upvotes: 1