将变量添加到数组/列表而不进行实例化

时间:2012-05-27 12:21:14

标签: c# instance-variables instances

我正在创建一个吉他标签程序。

选择音符(GameObject),输入和弦名称(字符串),然后按一个按钮将“和弦”添加到列表中。

Chord类只是一个String和一个GameObjects列表。我使用currentChord来保存当前的选择/名称。

当我选择一个音符时,我将它添加到currentChord.selectedList。

当我输入名称时,我将其设为currentChord.name。

Chord currentChord;
List<Chord> allChords;

单击按钮时,currentChord将添加到allChords(allChords.Add(currentChord))。

问题在于它是实例化的。所以当我点击添加一个不同的选择/名称时,allChords.notes列表中所有内容的选择都会改变...

我是否必须使用“new”关键字?

2 个答案:

答案 0 :(得分:2)

是的,您必须使用new关键字。

您反复将相同的实例添加到列表中,因此您最终得到了对同一实例的引用列表。

currentChord中的数据创建新实例以添加到列表中,或将currentChord中的实例添加到列表中,然后创建新实例并分配给currentChord

答案 1 :(得分:0)

您可能还想考虑可用于定义struct的{​​{1}}和class个关键字之间的差异。使用Chord将提供值类型行为,其中struct将提供引用类型行为。

例如,这是值类型行为:

class

这是引用类型的行为:

struct Chord
{
    public string Name;
}

...

Chord cMajor = new Chord;
cMajor.Name = "C Major";
Chord cMinor = cMajor; // Make a copy of the Chord instance
cMinor.Name = "C Minor";

Assert.That(cMajor.Name, Is.EqualTo("C Major")); // Assertion succeeds

MSDN提供了一个很好的描述:http://msdn.microsoft.com/en-us/library/aa288471(v=vs.71).aspx