将变量添加到数组/列表而不实例化
本文关键字:列表 实例化 数组 变量 添加 | 更新日期: 2023-09-27 18:35:31
我正在创建一个吉他标签程序。
选择音符(游戏对象),键入和弦名称(字符串),然后按按钮将"和弦"添加到列表中。
Chord 类只是一个字符串和一个游戏对象列表。我使用 currentChord 来保存当前的选择/名称。
当我选择一个音符时,我会将其添加到currentChord.selectedList中。
当我键入名称时,我会将其设为 currentChord.name。
Chord currentChord;
List<Chord> allChords;
当我点击一个按钮时,currentChord 会被添加到 allChords (allChords.Add(currentChord))。
问题是它是实例化的。因此,当我单击以添加不同的选择/名称时,allChords.notes 列表中所有内容的选择都会更改......
我必须使用"新"关键字吗?
是的,您必须使用 new
关键字。
又一遍地将同一实例添加到列表中,因此最终会得到对同一实例的引用列表。
从 currentChord
中的数据创建新实例以添加到列表中,或将 currentChord
中的实例添加到列表中,然后创建新实例并分配给 currentChord
。
您可能
还需要考虑可用于定义Chord
的struct
和class
关键字之间的区别。 使用 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
这是引用类型行为:
class Chord
{
public string Name;
}
...
Chord cMajor = new Chord;
cMajor.Name = "C Major";
Chord cMinor = cMajor; // No copy of the Chord instance, just another reference
cMinor.Name = "C Minor";
Assert.That(cMajor.Name, Is.EqualTo("C Major")); // Assertion fails
Assert.That(cMajor.Name, Is.EqualTo("C Minor")); // Assertion succeeds
MSDN 提供了一个很好的描述:http://msdn.microsoft.com/en-us/library/aa288471(v=vs.71).aspx