There is a weird inconsistency with converting and unboxing values and arrays:
var us = new uint[] { 1, 2, 3 };
var i1 = (int)us[0]; // direct value to value: works
var i2 = (int)(object)us[0]; // unboxing value to value: compiles, throws at runtime
var is1 = (int[])u; // direct array to array: does not compile
var is2 = (int[])(object)u; // unboxing array to array: works!
is2.GetType().Name // UInt32[]
Why is array unboxing allowed, when a direct conversion is prohibited?