[英]What does the type System.Byte[*] mean and can I cast it to a byte[] without copying?
我有一个通过COM互操作调用的object
参数,进入的对象的类型是System.Byte[*]
,我想把它变成一个byte[]
; 有没有办法在没有复制的情况下做到这一点?
显式转换和as
关键字都失败。 奇怪的是,如果我打破我的功能,这两种方法都可以在“立即”窗口中运行。
public void DoIt(object param) {
var bbuf = param as byte[];
// bbuf is NULL here
bbuf = (byte[])param;
// Throws cast exception
// This works, but I don't want to copy
var abuf = param as Array;
bbuf = new byte[abuf.Length];
abuf.CopyTo(bbuf, 0);
}
类型byte[*]
是一个非零下限单维数组。 例如,下限为1的数组。正常的一维数组是从零开始的(SZ-数组)。 在我看来,唯一的行动方案是复制它:
public static T[] ToSZArray<T>(Array array)
{
T[] dest = new T[array.Length];
Array.Copy(array, dest, array.Length);
return dest;
}
( 完整代码 )
不幸的是我在byte[*]
上找不到任何MSDN文档。 我唯一知道的是byte[*]
名称用于突出显示它与SZ数组byte[]
之间的区别。 后者在CLI中有特殊支持和说明。
用法示例:
// Create an array string[1..4]
var arr = Array.CreateInstance(typeof(string),
lengths: new[] { 4 },
lowerBounds: new[] { 1 });
// Some values.
arr.SetValue("1", 1);
arr.SetValue("2", 2);
arr.SetValue("3", 3);
arr.SetValue("4", 4);
// The conversion to an SZ-array.
string[] dest = ToSZArray<string>(arr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.