【发布时间】:2020-04-15 22:38:43
【问题描述】:
我想通过创建简单的结构(向量、粒子)来尝试 c# 的不安全“功能”。
情况
我有这 2 个结构,想将位置和速度向量注入我的 Particle 结构。 作为测试,我想打印出位置的 X 值,但不知何故我得到了随机值。
我这里有以下代码
矢量
public readonly struct Vector
{
public int X { get; }
public int Y { get; }
public Vector(int x, int y)
{
X = x;
Y = y;
}
}
粒子
public unsafe struct Particle
{
private Vector* mPosition;
private Vector* mVelocity;
public Particle(Vector position, Vector velocity = default)
{
mPosition = &position; // here is x 10
mVelocity = &velocity;
}
public int GetPosX()
{
return mPosition->X; // but here not
}
}
计划
public class Program
{
private static void Main(string[] args)
{
var pos = new Vector(10, 5);
var obj = new Particle(pos);
Console.WriteLine(obj.GetPosX()); // prints random value
}
}
问题
它打印一个随机值而不是 10。
【问题讨论】:
-
尝试将
struct声明为unsafe。 -
@RobertHarvey 没有帮助。
-
好吧,
unsafe不会创建一个完整的 C 环境。每次我使用unsafe时,我都必须“固定”一些内存以使其正常工作。有关示例,请参阅here。注意关键字fixed的使用。 -
这里的另一个例子:stackoverflow.com/q/11660127