Константный массив размера Маршалла

Я пытаюсь иметь массив выделенный стек внутри структуры. Ну указатель я имею ввиду. Но я бы хотел, чтобы распределение выполнялось без дополнительного кода, потому что я знаю размер, когда пишу код (я не хочу делать кучу new когда я создаю свою структуру). Если я могу даже сделать это без unsafe контекст это прекрасно. Я попробовал кое-что, но это не очень хорошо. Я новичок в C#, так что, вероятно, есть способ сделать это, чего я не видел!

public struct TestValue {int value; }

[StructLayout(LayoutKind.Sequential)]
public struct TestArray {
   [MarshalAs(UnmanagedType.ByValArray, SizeConst=128)] public TestValue[] s1;
}

public struct TestSpan
{
    Span<TestValue> data= stackalloc TestValue[10];
}

1 ответ

Решение
using System.Runtime.InteropServices;

public struct TestValue {int value; }

[StructLayout(LayoutKind.Sequential)]
public struct TestArray {
   [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=128)] public TestValue[] s1;
}

public class Foo
{
    void test()
    {
        TestArray test = new TestArray();
        test.s1[10] = new TestValue();
    }
}

Мне нужно было всего лишь небольшое изменение в конце!

Другие вопросы по тегам