✅ How do I deal with generic covariance and collections types?
Let's say I have osmething like the following:
I get the following error:
Invalid variance: The type parameter 'T' must be invariantly valid on 'IBoxCollection<T>.Collection'. 'T' is covariant
I've looked around on how to resolve this issue but haven't found anything. Is there an easy solution to this problem, or is there a pattern which will accomplish what I'm looking for?4 Replies
IReadOnlyDictionary
would probably work?
A normal dictionary lets you both insert (in) and retrieve (out) values
A readonly dictionary would only allow you to retrieve themThe problem is that someone can do:
Now your
BoxCollection<string>
, whose dictionary can only contain strings, contains an intCan you verify if I'm I misunderstanding something? It seems to not compile:
https://dotnetfiddle.net/v9UvPa
C# Online Compiler | .NET Fiddle
Test your C# code online with .NET Fiddle code editor.
Ah yeah, IReadOnlyDictionary isn't covariant
(Which is confusing, as IReadOnlyCollection and IReadOnlyList are)