繁体   English   中英

System.Byte [*]的含义是什么意思,我可以将其转换为byte []而无需复制?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM