c# - 没有装箱的托管结构到/从指针?

标签 c# pointers struct

假设我有一个不是 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/

相关文章:

c# - 为什么将结构转换为类似类的工作?

c - 仍然能够访问已释放的结构

c# - 如何使 List<List<int>> *.cshtml/razor - 兼容?

c# - 暂停后运行批处理文件并读取最后一行输出

c# - 使用正则表达式迭代字符串并搜索 3 个连续的连字符并将其替换为 [space][hyphen][space]

c++ - 删除指针失败

c++ - 如何将结构传递给函数?

c# - PowerShell - X509Certificates.X509Store 获取所有证书?

c - 为什么需要用type**来指向type*?

c - 双向链表工作不正常