ulong []到uint [] - 这是一个好习惯吗?

时间:2014-07-09 09:11:44

标签: c#

我偶然发现了这个问题并看到了这个解决方案:

ulong[] ulongArray = { 1, 2, 3, 4 };
uint[]  uintArray  = null;

uintArray  = (uint[]) (object) ulongArray;
ulongArray = (ulong[])(object) uintArray;

我想知道你是怎么做到的?对我来说有点奇怪..

2 个答案:

答案 0 :(得分:7)

虽然会编译,但它会在执行时抛出异常。这两种类型不兼容。

类似的情况将是:

uint[] uintArray = { 1, 2, 3, 4 };
int[] intArray = (int[]) (object) uintArray;

工作 - CLR很乐意将uint[]引用视为int[]引用,即使C#不是。{ (枚举类型数组及其底层整数类型之间的转换也是如此。)

我会谨慎使用它,只是为了让任何阅读代码的人感到惊讶 - 但在某些情况下可能是合适的。

答案 1 :(得分:1)

这应该有效:

ulong[] ulongArray = { 1, 2, 3, 4 };
uint[] uintArray = ulongArray.Select(u => (uint) u).ToArray();