假设我有一个不是 C# 原语之一的结构。
我想知道是否有办法(包括不安全的代码)从结构类型的实例中获取指针(指针不必是类型安全的,它可以是 void*
) 并从指针获取结构类型的实例,但不涉及装箱。
(我知道 System.Runtime.InteropServices.Marshal
类几乎提供了我所描述的内容,但它涉及将结构作为 object
传递和获取,这意味着涉及拳击。)
最佳答案
您可以使用 unsafe
区域通过 &
运算符获取指针并使用 *
运算符转换回类型。
public struct Foo
{
public int bar;
};
void Main()
{
var foo = new Foo();
foo.bar = 5;
unsafe
{
Foo * fooPtr = &foo;
Console.WriteLine("Foo address {0:X}", *fooPtr);
Foo anotherFoo = *fooPtr;
Console.WriteLine("Bar= {0}", anotherFoo.bar);
}
}
关于c# - 没有装箱的托管结构到/从指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27687606/