So I'm going to suggest that the best answer is that I'm right and that this really is a compiler bug. While I see the point perfectly clearly, your explanation ignores the "params" keyword. In fact to use covariance this way, one MUST ignore the params keyword, as if it was unimportant. I postulate that there simply is no plausible explanation for compiling the code this way with Params present as a keyword on the type signature of Foo: to invoke your explanation you need to convince me that myClass[] should be type-matched to object[], but we shouldn't even be asking that question given the params construct. In fact, the more you think about this, the more clear that it is actually a genuine C# 5.0 compiler bug: the compiler is neglecting to apply the params keyword. The language spec doesn't actually need any change at all. I should get some kind of wierd badge, imho!