【问题标题】:Use Struct as a Ptr/class? Need a fix .NET使用 Struct 作为 Ptr/类?需要修复 .NET
【发布时间】:2010-05-10 00:55:18
【问题描述】:

我写了一堆代码,我想以最快的方式修复它。我会用更简单的方式描述我的问题。

我有苹果和橙子,它们都是 Point 和列表中的苹果、橙子。我创建一个 PictureBox 并在屏幕上绘制苹果/橙子并移动它们并通过标签更新点。

现在的问题是,因为它是一个结构,所以标签是一个副本,所以列表中的原始元素不会更新。那么,我该如何更新它们呢?我考虑使用点?但那些似乎是只读的。所以我能想到的唯一解决方案是

  • 清除列表,遍历所有控件,然后检查图片框属性以检查图像是苹果还是橙色,然后将其添加到列表中

我真的只是在输入这个问题时才想到这个解决方案,但我的主要问题是,有没有更好的方法?是否有一些List<Ptr<Point>> 类我可以使用,所以当我通过标签更新苹果或橙子时,列表中的元素会像类一样更新?

【问题讨论】:

  • 你的问题非常不清楚。

标签: .net class struct


【解决方案1】:

使用您的命名:

public class Ptr<T> where T : struct
{
    public T Value { get; set; }

    public Ptr(T value) { Value = value; }
}

然后您可以将您的列表设为List&lt;Ptr&lt;Point&gt;&gt;

编辑

或者,最简单的解决方案是将Point 结构重新创建为您自己命名空间中的一个类。

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

这显然是准系统实现;如果您需要其他功能,您显然需要自己实现。然而,这会给你一个可变的Point 类。

【讨论】:

  • 我没有测试过,但我不需要重写很多代码吗?使用 .Value 而不是直接访问 .X、.Y?
【解决方案2】:

你应该创建一个类来包含你的Points。

【讨论】:

  • 我有点想问是否有内置的方式而不是自己编写。 (或者如果有替代解决方案,我正在尝试尽可能少地重写,也许我可以继承但我不能编写/文本代码,直到 2 小时后)
【解决方案3】:

如果值语义不是您想要的,那么您应该使用class 而不是struct。有什么原因不能将您的structs 转换为classes?

编辑忽略以上,我不太明白被问到什么,但我认为 SLaks 有正确的解决方案。

【讨论】:

  • 他不能改变System.Drawing.Point
  • 哦,对不起,你是对的......我认为这个问题是在我回答后编辑的,因为我不太明白被问到什么:)
猜你喜欢
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多