【发布时间】:2011-09-09 11:07:43
【问题描述】:
我有一个这样的结构:
public struct MapTile
{
public int bgAnimation;
public int bgFrame;
}
但是当我用 foreach 循环它来改变动画帧时,我做不到......
代码如下:
foreach (KeyValuePair<string, MapTile> tile in tilesData)
{
if (tilesData[tile.Key].bgFrame >= tilesData[tile.Key].bgAnimation)
{
tilesData[tile.Key].bgFrame = 0;
}
else
{
tilesData[tile.Key].bgFrame++;
}
}
它给了我编译错误:
Error 1 Cannot modify the return value of 'System.Collections.Generic.Dictionary<string,Warudo.MapTile>.this[string]' because it is not a variable
Error 2 Cannot modify the return value of 'System.Collections.Generic.Dictionary<string,Warudo.MapTile>.this[string]' because it is not a variable
为什么我不能更改字典中的结构中的值?
【问题讨论】:
-
Ewww...可变结构。 (有人不得不说)
-
你没有在这里使用课程有什么原因吗?
-
@Justin Niessner,为什么不好?
-
@Lurler - 因为它们会导致大量混乱。人们开始像使用类一样使用它们,并期望它们的行为也与类相同……但事实并非如此(这就是您的代码存在问题的原因)。
-
@Lurler:这正是可变结构的问题——行为是有问题的。大多数时候,出于性能原因选择结构是过早的优化。最好将您的代码编写成可用和可维护的,然后进行分析,然后在必要时进行优化。在这种情况下,我怀疑这实际上会更快,尤其是如果它存储在字典中。
标签: c# dictionary struct foreach