保存对列表中特定对象的可读/可写引用

时间:2016-12-26 22:50:58

标签: c# foreach monogame ref picking

我在编码方面遇到了障碍。我用C#编写代码,用Monogame编写程序。

我有一个单位列表,我正在尝试用它们进行鼠标选择。我将一条光线从鼠标射入屏幕,然后找出它撞击的第一个物体。

//  A method to find which units are currently under the mouse.
    static public void FindPickedUnits(string ID)
    {

        foreach (Unit unit in ListDictionary[ID])
        {

            //  Run the code to check whether or not it is picked, and returns a float representing how close it is.
            unit.IsPicked = Cursor.Pick(unit.Collisions);

            //  And if it is picked...
            if (unit.IsPicked != null)
            {

                //  We will clone it as the closest unit if none exist, or...
                if (ClosestUnit == null)
                {

                    ClosestUnit = unit;

                }

                //  if one already does, overwrite it if it's even closer.
                else if (unit.IsPicked < ClosestUnit.IsPicked)
                {

                    ClosestUnit = unit;
                    Console.WriteLine("The new closest unit is at X" + unit.Position.X + " Y" + unit.Position.Y);

                }
            }
        }
    }

    //  elsewhere...

    Console.WriteLine("The selected unit's color is " + ClosestUnit.Tint);

此代码将拾取的单元克隆到ClosestUnit对象中,然后我可以随时读取,没问题。

无论其

我不想纯粹读取最近单位的值,我想写给他们,并改变其中的一些。但是,如果我更改ClosestUnit对象的值,它不会反映回单位列表中的实际单位。

TL; DR我希望能够从单元列表中单个单元,然后在代码中的其他位置写入单元。如果ClosestUnit对象的功能类似于ref参数,则直接引用列表中的实际单位而不是克隆,这很容易,但我不知道如何做到这一点。

处理此问题或避免此问题的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

具有讽刺意味的是,我的代码一直没有任何问题。我没有意识到ClosestUnit对象本质上是一个类(引用类型),它直接引用了ListDictionary中的单元,而不是它的克隆。

我可以更改ClosestUnit对象上的值,它会反映回原始值。耶!