【问题标题】:Add references to objects to a list将对对象的引用添加到列表
【发布时间】:2011-05-10 14:59:10
【问题描述】:

我有以下代码:

Point a = new Point(3, 3);

List<Point> points = new List<Point>();

points.Add(a);

a = new Point(50,50);

a.X += 50; 

但是假设我希望最后两行代码也影响列表中的值;我该怎么做呢? 我的猜测是添加指向列表的指针?但我认为即便如此“新点(50,50);”仍然不会更新列表的值?

谢谢

【问题讨论】:

  • 我意识到我可以直接访问列表中的值。但这不是我想做的。我想创建一个调试窗口,通过将它们添加到列表中来跟踪我“注册”的某些变量。我要跟踪的变量是应该在我的调试窗口中可见的图像,因此使用调试器没有任何意义。

标签: c# list pointers


【解决方案1】:

不,您不需要指针。对 .NET 世界中的对象的引用基本上等同于非托管代码世界中的指针。当您添加两个 value types and reference types 的事实时,事情会变得有点棘手,但在这种情况下,直接在数组中修改对象或对象的引用就足够了。

因此,您可以执行以下任一操作:

points[0] = new Point(50, 50);

points[0].X = 50;
points[0].Y = 50;

(尽管您应该 probably get into the habit 将结构视为不可变的,因此仅出于示例目的考虑以上内容)。

【讨论】:

  • 实际上如果pointsList&lt;Point&gt; 而不是数组(如问题所示),则不能这样做:points[0].X = 50;,因为它会给出编译错误:Cannot modify the return value of 'System.Collections.Generic.List&lt;System.Drawing.Point&gt;.this[int]' because it is not a variable跨度>
【解决方案2】:

您可以直接访问列表中的值:

points[0] = new Point(50, 50);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多