gpt4 book ai didi

c# - System.Double[*] 是什么意思

转载 作者:太空狗 更新时间:2023-10-30 00:04:57 27 4
gpt4 key购买 nike

这个 gem 是在我们反编译的一些互操作代码中创建的。我们不知道如何创建这个数组的实例,也不知道它是什么类型的数组。

查看 Type.GetElementType 给我它是一个 Double 类型的数组,但我们无法弄清楚它与 System.双[].

最佳答案

这是一个典型的互操作问题,数组是在 COM 自动化服务器中创建的。它将数组公开为 SafeArray ,CLR 会自动将它们编码为 .NET 数组对象,并按照安全数组描述符中指定的方式维护其结构。

System.Double[] 数组是 CLR 中一种非常特殊的数组,它是一个“向量数组”,其第一个元素位于索引 0 处。这类数组在 CLR 中进行了高度优化。

您得到的数组的问题在于它有一个维度,就像一个向量数组,但它的第一个元素不在索引 0 处。如果您与用 Visual Basic 或 FoxPro 编写的代码互操作,则很常见。这样的代码通常喜欢从索引 1 开始数组。但是可以是任何东西。

C# 没有语法糖来访问这样的数组,您不能使用 [] 运算符来索引数组。您必须缓慢地使用 Array 类的成员。所以:

  • Array.GetLowerBound(0) 告诉您从哪里开始索引数组
  • Array.GetUpperBound(0) 告诉你要走多远
  • 使用 Array.GetValue(index) 从数组中读取一个元素

复制数组可能更容易:

public static double[] ConvertDoubleArray(Array arr) {
if (arr.Rank != 1) throw new ArgumentException();
var retval = new double[arr.GetLength(0)];
for (int ix = arr.GetLowerBound(0); ix <= arr.GetUpperBound(0); ++ix)
retval[ix - arr.GetLowerBound(0)] = (double)arr.GetValue(ix);
return retval;
}

关于c# - System.Double[*] 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23125903/

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