首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Byte[*]类型是什么意思?我可以在不复制的情况下将它转换为byte[]?

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

Stack Overflow用户
提问于 2013-11-13 21:34:10
回答 1查看 919关注 0票数 3

我有一个通过COM互操作调用的object参数,而传入的对象的类型是System.Byte[*],我想把它拿到一个byte[]中;有没有一种方法可以不进行复制呢?

显式强制转换和as关键字都失败。奇怪的是,如果我破坏了我的函数,那么这两种方法在“立即”窗口中都是如何工作的。

代码语言:javascript
运行
复制
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);
}
EN

Stack Overflow用户

回答已采纳

发布于 2013-11-13 21:42:35

byte[*]类型是一个非零下限的单维数组.例如,一个下限为1的数组.普通的一维数组是基于零的(SZ-数组).在我看来,唯一的行动就是复制它:

代码语言:javascript
运行
复制
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中有特别的支持和指示。

示例用法:

代码语言:javascript
运行
复制
// 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);
票数 8
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19964846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档