当我尝试传递这样的公共(public)变量的地址时:

ML.Register("Radius", &lBeacons[i].Radius, 0.0f, 200.0f, 10.0f);

我收到此错误:
error CS0212: You can only take the address of an unfixed expression inside of a fixed statement initializer

注册函数如下所示:
public unsafe void Register(string desc, float* val, float minimum, float maximum, float stepsize)

信标是一个列表。它拥有一个具有公共(public)半径的类。

最佳答案

仅通过引用传递值没有意义吗?

public void Register(string desc, ref float val, float minimum,
         float maximum, float stepsize) {...}

当然,使用公共(public)变量(字段)也是一个坏主意......它会像这样工作:
ML.Register("Radius", ref lBeacons[i].Radius, 0.0f, 200.0f, 10.0f);

但是,如果您将 Radius 设为属性,它将不起作用 - 所以不要这样做。考虑传递信标(或类似)本身,或其他一些基于对象(或可能基于事件)的机制。

就像是:
ML.Register("Radius", lBeacons[i], 0.0f, 200.0f, 10.0f);

和:
private Beacon beacon;
public void Register(string desc, Beacon beacon, float minimum,
         float maximum, float stepsize) {
    this.beacon = beacon;
}
void Foo() {
    beacon.Radius++; // etc
}

这里我们引用了 Beacon 对象,它没有指针的 unsafe 问题。如果您不想直接公开 Beacon,请考虑使用接口(interface)。

关于c# - 传递公共(public)变量的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/897962/

10-11 14:24