In short that's upcasting
from IEnumerable<Word1252>
to IEnumerable<IWord>
,
And that requires covariance
to work.
Even though IEnumerable is marked as
out
(covariant)
Covariance doesn't work for 'value types' - i.e. the struct you have the interface defined.
e.g. see...
Is this a covariance bug in C# 4?
(or a bit different but boils down to the same issue)
Why cannot IEnumerable<struct> be cast as IEnumerable<object>?
To resolve you can just define your list like
private static List<iWord> words1252 = new List<iWord>();
Or define your enumerator like this:
IEnumerator<iWord> IEnumerable<iWord>.GetEnumerator()
{
foreach (var word in words1252)
yield return word;
}