con*_*ons 6 c# struct pointers unsafe d
如果可以将一个指向数组的指针放在C#中的不安全结构中的子结构中,就像在C中一样,构建复杂的数据结构而不会产生每个节点有一个对象的开销,这样会更容易,而且时间更少,以及语法更清晰,更易读.
是否有一个深层的架构原因,为什么不安全的结构中的固定数组只允许由"值类型"而不是指针组成?
我假设只有在结构中明确命名指针必须是故意削弱语言的决定,但我找不到任何关于为什么会这样的文档,或者不允许指针数组在结构中的原因,因为我会假设垃圾收藏家不应该关心被标记为不安全的结构.
数字火星'D优雅地处理结构和指针,我发现我无法快速开发简洁的数据结构; 通过在C#中引用抽象,很多功能似乎已从语言中删除,即使指针至少仍然存在于营销意义上.
也许我错误地期望语言随着时间的推移有效地表示复杂的数据结构.
我只是猜测,但这可能与不同目标平台的不同指针大小有关。看来 C# 编译器直接使用元素的大小进行索引计算(即没有 CLR 支持计算固定大小的缓冲区索引...)
无论如何,您可以使用 s 数组ulong并将指针强制转换为它:
unsafe struct s1
{
public int a;
public int b;
}
unsafe struct s
{
public fixed ulong otherStruct[100];
}
unsafe void f() {
var S = new s();
var S1 = new s1();
S.otherStruct[4] = (ulong)&S1;
var S2 = (s1*)S.otherStruct[4];
}
Run Code Online (Sandbox Code Playgroud)