Константный массив размера Маршалла
Я пытаюсь иметь массив выделенный стек внутри структуры. Ну указатель я имею ввиду. Но я бы хотел, чтобы распределение выполнялось без дополнительного кода, потому что я знаю размер, когда пишу код (я не хочу делать кучу 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();
}
}
Мне нужно было всего лишь небольшое изменение в конце!