C# 如何从列表更新项目属性?
我有一个名为mysoldier的通用列表,其项目具有高度、重量等属性。 所以在添加士兵(mysoldier.Add)之后,我想更改士兵的高度。为此,我使用了以下方法:C# 如何从列表更新项目属性?,c#,unity3d,C#,Unity3d,我有一个名为mysoldier的通用列表,其项目具有高度、重量等属性。 所以在添加士兵(mysoldier.Add)之后,我想更改士兵的高度。为此,我使用了以下方法: public void Increase Height() { for (int i = 0; i < mysoldier .Count; i++) { if (this.mysoldier [i].height > 7) { this.mysoldier [i].heigh
public void Increase Height()
{
for (int i = 0; i < mysoldier .Count; i++)
{
if (this.mysoldier [i].height > 7)
{
this.mysoldier [i].height= 7;
}
else
{
this.mysoldier [i].height+= 1;
}
}
但是通过这个代码,我只改变了先前创建的士兵的高度。因此,请任何人都告诉我代码中的错误是什么?一些提示:
如果它是一个列表,不要叫它“mySoldier”,叫它“mySoldiers”。这会让你感到困惑。
你是如何创造这些士兵的?因为。。。如果您正在创建,然后通过循环添加,那么您就是在将引用(内存地址)添加到列表中。
如果你改变了一件事,你也改变了所有的事。
如果您只想更改一个特定项的属性,只需将索引作为参数传递给函数,而不是使用for语句
如果问题仍然存在,让我们尝试解决它。最后一段代码没有问题。您只需修改调用的代码
IncreaseHeight
即可指定正确的索引mysoldier
必须为mysoldier
。(事实上,正如费尔南多解释的,“mySoldiers”加上“s”)你应该从代码中完全删除“this.”。作为一般规则,永远不要在统一中使用“this.”。您有时会在示例代码中看到它,这是完全错误的。所以删除它。注意,如果“高度”是一个浮点数,你需要说7f不是7,1f不是1等等。@JoeBlow你的“永远不要在Unity中使用“this”是没有意义的。有时,当参数和类字段具有相同的名称时,必须使用“this”来引用类字段。首先,我创建了一个公共类,添加了它的所有属性,如身高、体重等。。然后创建一个类构造函数,创建士兵列表,并使用按钮将士兵添加到新列表mysoldiers中
public void IncreaseHeight(int i) //#, or mysoldier.Count - 1 (I believe) for last
{
if (this.mysoldier [i].height > 7)
{ this.mysoldier [i].height= 7; }
else { this.mysoldier [i].height+= 1; }
}