You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 RC1使用UnsafeAccessorAttribute触发CLR内部错误求助

解决.NET 8 UnsafeAccessorAttribute 访问私有字段时的CLR内部错误

问题出在UnsafeAccessor的方法签名不符合规范,导致CLR内部报错。当使用UnsafeAccessorKind.Field访问实例私有字段时,静态extern方法的返回类型必须是ref 字段类型,而非直接返回字段的值类型——该属性需要返回对私有字段的引用,而非字段值的拷贝。

修正后的代码

using System;
using System.Runtime.CompilerServices;

var t = new Test();
ref int sizeRef = ref Caller.GetSize(t);
Console.WriteLine(sizeRef);

public class Caller
{
    [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_size")]
    public static extern ref int GetSize(Test c);
}

public class Test
{
    private int _size = 4;
}

关键修改点

  • 将GetSize方法的返回类型从int改为ref int,明确返回对私有字段_size的引用
  • 调用时通过ref关键字获取该引用,再读取字段值

运行修正后的代码,控制台将正常输出4。

内容的提问来源于stack exchange,提问作者Илья Белов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:00:19