【问题标题】:C# Edit a variable of arraylist indexC#编辑arraylist索引的变量
【发布时间】:2015-10-04 06:44:24
【问题描述】:

我有一个矩形数组列表,我想编辑所有矩形的 X 和 Y 值。

我尝试使用 foreach 循环

        foreach (Rectangle rect in rectangles)
            rect.X += 1;

但这不起作用,因为它是只读的,所以我尝试了一个常规的 for 循环

        for (int i = 0; i < rectangles.Count; i++)
            rectangles[i].X += 1;

由于某种原因,这也不起作用,因为 rectangles[i] 没有任何矩形的方法。

然后我在 stackoverflow 的某个地方偶然发现了一篇关于如何调用数组列表元素的方法的帖子。而且我还没有找到这方面的例子,所以我希望有人能解决这个问题。

(Unit.unitArray[selectedUnit] as MyClass).DisplayUnitAttributes()

但我不知道如何使用它,我不明白应该用什么 Unit 替换,我猜 MyClass 会是 Rectangle...

感谢任何帮助!

TLDR:我想遍历一个带有矩形的数组列表,并编辑它们的 X 和 Y 值。

【问题讨论】:

  • 您能帮我总结一下不同之处吗?我习惯了Java,其中ArrayList是List的接口。
  • @GrantWinney 尝试 (int i = 0; i ,不起作用,因为“返回值不是变量”...
  • @M.kazemAkhgary 这不行,我也不知道结构是什么。
  • @M.kazemAkhgary 顺便说一句,我正在使用 C# 的 Rectangle 类,我只是想要一种在数组列表中编辑它的值的方法,我到处都是链接,这对我没有帮助。你能回答我的问题吗?
  • 我喜欢每个人都在删除他们的答案和 cmets,请仅在您真正知道自己在做什么的情况下发布。

标签: c# arrays loops arraylist


【解决方案1】:

根据你得到的错误。 "Return value is not a variable"

矩形不是一个类。它是一个非引用类型的结构,因此您必须为其分配新值。

List<Rectangle> rectangles = new List<Rectangle>();

// rectangles.Add(x); make your list here

for (int index = 0; index < rectangles.Count; index++)
{
    Rectangle r = rectangles[index];
    r.x += 1;
    rectangles[index] = r;
}

【讨论】:

    【解决方案2】:

    之所以这样,是因为没有输入 ArrayList。最好使用List&lt;T&gt; 代替(其中 T 是您的类,在您的示例中它将是一个矩形)。这里是MSDN link

    您不能在 foreach 循环中以这种方式修改对象。有关此SO question 的更多信息。

    关于这个例子:(Unit.unitArray[selectedUnit] as MyClass).DisplayUnitAttributes() 这叫做铸造。您可以在this SO question 上阅读更多相关信息。所以在你的代码中应该是这样的:(rectangles[i] as Rectangle).X += 1;。您还应该检查此转换的结果是否不为空等。但最好阅读以前的链接以了解这一点。

    【讨论】:

    • 我知道什么是强制转换,我尝试了 ---- for (int i = 0; i
    • 啊,好吧,你的 Rectangle 是一个结构,而不是一个类。对不起!那么第二个答案很好;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2016-08-23
    • 1970-01-01
    • 2023-03-18
    • 2017-08-08
    • 2015-09-24
    相关资源
    最近更新 更多