gpt4 book ai didi

c# - System.Byte[*] 类型是什么意思,我可以在不复制的情况下将它转换为 byte[] 吗?

转载 作者:行者123 更新时间:2023-11-30 13:57:42 24 4
gpt4 key购买 nike

我有一个通过 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;
}

( Full code )

不幸的是,我找不到关于 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);

关于c# - System.Byte[*] 类型是什么意思,我可以在不复制的情况下将它转换为 byte[] 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com