C#:存储对象中数组位置的引用

时间:2011-04-19 17:54:27

标签: c# reference

我有一个c#对象,它设置2个浮点数的值。我有很多这样的东西。 我想将这些浮点数存储在数组中。所以布局将是这样的:

给定一个float数组:float [] vec = new float [6]

对象1设置vec [0]和vec [1]的值 对象2设置vec [2]和vec [3]的值 对象3设置vec [4]和vec [5]

的值

如何在对象上存储引用,以便它们访问正确的向量元素?我可以存储索引,但在老式的c ++世界中,我可以将指针直接存储到数组中。

3 个答案:

答案 0 :(得分:4)

当我需要使用C风格的指针指向数组的中间时,我只创建一个包含对数组和当前索引的引用的通用结构,并使用它。随意窃取我的代码:

http://blogs.msdn.com/b/ericlippert/archive/2011/03/10/references-and-pointers-part-two.aspx

答案 1 :(得分:1)

C#是专门设计的,因此您无法在安全的托管代码中存储对数组元素或其他“非根”内存位置的引用。具有这样的引用会使垃圾收集变得非常复杂,并且C中的这种能力是引入令人讨厌的错误的已知潜在罪魁祸首。例如,您可以在C中在堆栈上分配一个数组,并将引用传递给数组元素。如果在展开堆栈后保留该引用,它现在指向任意位置并写入引用可能导致数据损坏。

答案 2 :(得分:0)

您可以使用PointF之类的结构:

PointF[] points = new PointF[3];
Console.WriteLine("X:{0}, Y:{0}", points[0].X, points[0].Y);

或者您可以创建自己的结构:

public struct Vector
{
    public int X;
    public int Y;
}