The question maybe a little confusing, but it's hard to make clear this question in a subject title.
I have method declared and implemented like this:
public IList<string> GetBookTitles()
{
IList<string> bookTitles = new List<string>();
// do something to populate the bookTitles list.
return bookTitles;
}
Why can't I pass the result of this method to a List<string>
? After all, List<string>
is a kind of IList<string>
.
Well, for starters, just look at the members of IList
and compare it with List
. List
has methods that an IList
doesn't. (List
has a BinarySearch
method that IList
doesn't, just as a single example.)
Arrays also implement IList
, as an example. An array however is not a List
, so you can't, and shouldn't, be able to pass a string[]
to a method that accepts a List<string>
.
You have a few possible solutions. One would be to just change your method to return a List<string>
rather than an IList<string>
(that's what I'd suggest). If that's what you really need then you shouldn't be restricting the return type to IList<string>
. Another (poorer) option would be to cast the result back to a List<string>
before passing it to the next method, since you happen to know that it's what the underlying type really is.