C# 初始化结构中不安全的固定双数组

C# 初始化结构中不安全的固定双数组,c#,unsafe,C#,Unsafe,这个问题是我们的后续问题。 我有以下结构: [StructLayout(LayoutKind.Explicit, Size = 120, CharSet = CharSet.Unicode)] public unsafe struct DynamicState { [FieldOffset(0)] public fixed double Position[3]; [FieldOffset(24)] public fixed double Velocity[3];

这个问题是我们的后续问题。 我有以下结构:

[StructLayout(LayoutKind.Explicit, Size = 120, CharSet = CharSet.Unicode)]
public unsafe struct DynamicState
{
    [FieldOffset(0)]
    public fixed double Position[3];

    [FieldOffset(24)]
    public fixed double Velocity[3];

    [FieldOffset(48)]
    public fixed double Acceleration[3];

    [FieldOffset(72)]
    public fixed double Attitude[3];

    [FieldOffset(96)]
    public fixed double AngularVelocity[3];
}
如果我尝试初始化这样的数组:

var dynamicState = new DynamicState();
double[] array = new double[] { 1, 2, 3 };

fixed (double* pArray = array)
{
    dynamicState.Acceleration = pArray;
}
我得到以下错误:
赋值的左侧必须是变量、属性或索引器


初始化作为结构一部分的不安全数组的正确方法是什么?

简单的方法似乎有效:


我不能说我对非托管代码有很多经验,但至少值得看看这些选项……

它对性能很敏感。然而,如果dynamicstate不安全,编译器会优化它吗?他可能会使用PInvoke
cmemset
函数。它太快了(虽然它对浮点数不是很好)@Seth:我不喜欢对优化猜太多:)看看第二个是否适合你——它可能会更快。
for (int i = 0; i < 3; i++)
{
    dynamicState.AngularVelocity[i] = array[i];
}
Marshal.Copy(array, 0, new IntPtr(dynamicState.AngularVelocity), array.Length);