【发布时间】:2014-06-20 17:03:16
【问题描述】:
我需要在 C# 中将 short[] 转换为 ushort[]
public ushort[] Pixels16bits;
GrayscalePixelDataS16 Pixeldata = PixelDataFactory.Create(img.PixelData, 0) as GrayscalePixelDataS16; //Pixeldata has short[] values
Pixels16bits = pixeldata; //Here's where I struggle, I need to convert to ushort prior to assign to pixels16bits
谢谢
【问题讨论】:
-
有趣的技巧:
short[] signed = new short[1]; ushort[] unsigned = (ushort[])(object)signed;有效但实际上并没有转换(即unsigned.GetType()返回short[])。这不会在运行时产生异常。中间object步骤是必需的,因为 C# 规范不允许这种转换,但 CLR 规范允许。 -
@CodesInChaos 但它不起作用。它编译。这并不能成为解决方案。数组协方差特定于引用类型。
-
@Servy 它编译并且不会抛出运行时错误。
short到ushort是表示保留,因此运行时允许它。它的工作原理是您得到一个几乎在所有情况下都可以被视为结果类型的对象,尽管运行时类型仍然是原始类型。这不是数组协方差,而是一种非常相似的机制。 -
这个问题是关于将数组
short[]转换为ushort[],假设的重复是关于将整数值short转换为ushort -
感谢@CodesInChaos,它工作得很好