问题描述
我一直试图找出 Length
类的 System.Array
属性的实现(出于好奇)。因此,在官方 dotnet/coreclr
存储库中,我找到了该类 (the link) 的定义,但我完全不了解代码。就这样:
public int Length => checked((int)Unsafe.As<RawArrayData>(this).Length);
Unsafe.As<T>(Object)
将给定对象强制转换为指定类型。
因此我们将 System.Array
的 this
实例转换为 RawArrayData
并获取返回对象的 Length
字段。
让我们看看 RawArrayData
类中的 System.Runtime.CompilerServices.RuntimeHelpers
(它是一个嵌套类,the link):
internal class RawArrayData
{
public uint Length; // Array._numComponents padded to IntPtr
#if bit64
public uint Padding;
#endif
public byte Data;
}
正如我们所见,它只是一个字段为空的类,CoreCLR 是如何解析 RawArrayData.Length
的?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)