gpt4 book ai didi

c# - 从不安全的结构中获取固定的数组值

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:54 26 4
gpt4 key购买 nike

我正在使用一个外部 C 库,它带有一个 C# 包装器文件,其中包含一个结构,例如(以及许多其他东西):

[StructLayout(LayoutKind.Sequential, Pack = 8)]
unsafe public struct Data
{
public fixed double Values[3];
};

我可以通过向该结构添加一个额外的方法来获取值:

public double[] CopyFixedDoubleArray()
{
double[] result = new double[3];
fixed (double* pDst = result)
{
fixed (double* pSrc = Values)
{
double* pd = pDst;
double* ps = pSrc;
for (int i = 0; i < result.Length; i++)
{
*pd = *ps;
pd++; ps++;
}
}
}
return result;
}

但这不是我想要的,因为我不想接触包装文件(以避免必须将外部文件保留在我们的 SCM 存储库中)。无论我尝试从该结构外部获取值,都会导致以下错误:

Fixed size buffers can only be accessed through locals or fields

我尝试过的:

  • double a = data.Values[2];
  • 双 a;不安全 { a = data.Values[2]; }
  • 双 a; fixed (double* p = data.Values) { a = p[2]; }
  • fixed (double a = data.Values[2]) {/* 使用 */}

有什么办法可以解决这个问题吗?

最佳答案

突然我想到了“扩展方法”这个词。是的,我让它工作了:

public static double[] CopyFixedDoubleArray(this Data data)
{
unsafe
{
return new[] { data.Values[0], data.Values[1], data.Values[2] };
}
}

关于c# - 从不安全的结构中获取固定的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28546224/

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