我有一个通过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);
}发布于 2013-11-13 21:42:35
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);https://stackoverflow.com/questions/19964846
复制相似问题