Вам придется копировать данные (ковариантны только массивы ссылочного типа), но мы можем попытаться сделать это эффективно; Buffer.BlockCopy
, кажется, работает:
sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = new byte[signed.Length];
Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length);
Если это был ссылочный тип, вы можете просто привести ссылку без дублирования массива:
Foo[] arr = { new Foo(), new Foo() };
IFoo[] iarr = (IFoo[])arr;
Console.WriteLine(ReferenceEquals(arr, iarr)); // true