【问题标题】:Trying to create pointer to list element试图创建指向列表元素的指针
【发布时间】:2018-06-02 06:16:01
【问题描述】:

我有一个 RectangleF 列表。我有一个非静态类,它需要引用此列表中的元素。 我正在尝试使用指针:

Item f = new Item();
unsafe
{
    f.linkedCollider = &Collisions.items.Last();
}

但是,这会产生编译器错误:

无法获取给定表达式的地址

有没有办法解决这个问题?

【问题讨论】:

  • 如果您希望能够保留对列表中项目的引用,那么有一个引用类型列表,而不是值类型。使用指针不会导致有效的解决方案。这是假设您需要对项目的引用,而您可能不需要。
  • 使用指针是一个非常糟糕的主意。创建一个类似于RectangleF 的类,并使用引用语义。
  • 您可以使用 C# 7.0 ref 返回。但也许您应该解释一下您要解决的问题,看起来像是 xy 问题。

标签: c# arrays list pointers memory


【解决方案1】:

没有办法解决这个问题:与 C 和 C++ 中的对应物不同,C# 中的地址运算符 & 非常严格:it can be applied only to variables

address-of 运算符只能应用于变量。如果变量是可移动变量,可以在获取地址前使用fixed语句临时固定变量。

您收到错误消息,因为方法调用不是变量。

由于 C# 引用的行为方式类似于智能指针而不需要指针语法,因此您可以在大多数需要间接寻址的情况下避免使用指针。

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多