存储在数组中的对象实例的替代名称,c#
本文关键字:实例 数组 对象 存储 | 更新日期: 2023-09-27 18:17:51
我有两个相同类型的对象实例。(准确地说,这是Unity3D的AudioSource
)我需要应用一些动作,如初始化,销毁等,所以我认为将它们存储在一个数组将是一个好主意,所以我可以迭代。
AudioSource[] audioSources = new AudioSource[2];
有了这个,我可以在数组上foreach
,并且只写一次初始化代码和其他常见任务。
但是这两个实例服务于不同的目的,比如说,第一个是用于BGM的AudioSource,第二个是用于SFX的。通过这种方式,代码将更具可读性,并且我仍然可以通过使用数组迭代两个实例。
所以我认为我应该给每个实例一个替代名称,如bgmSource
和sfxSource
。我想问,这是正确的做法吗?
AudioSource bgmSource = audioSources[0];
AudioSource sfxSource = audioSources[1];
另一个解决方案是使用Dictionary,它不太适合这样小的数组但它可以帮助您区分对象,而无需使用第二个变量来存储引用到数组中的那个
例如: Dictionary< string, AudioSource > audioSources;
audioSources = new Dictionary<string, AudioSource>
{
"BGM_SOURCE", new AudioSource(),
"SFX_SOURCE", new AudioSource()
};
那么你也可以使用enum来跟踪字典键,而不是使用字符串/常量值:
// Enum declaration
enum AudioSourceNames
{
BGM_SOURCE,
SFX_SOURCE
}
// Called before first update
public void Start()
{
// Dictionary declaration
Dictionary< int, AudioSource > audioSources;
audioSources = new Dictionary< int, AudioSource >
{
( int )BGM_SOURCE, new AudioSource(),
( int )SFX_SOURCE, new AudioSource()
};
// Accessing the dictionary
audioSources[ ( int )AudioSourceNames.BGM_SOURCE ].Play();
}
BTW:您可以对数组使用枚举器技术,这样您就不必记住数组
在我看来,你的解决方案似乎不错。
只初始化一次代码和其他常见任务
这些东西的代码希望在AudioSource,不是吗?
这是合法的。这只是一个喜好/设计的问题。我会说你可以把它们放进某种字典里。所以你可以通过key
正确地标记它们。这样你就不需要记住 [0]
是bgmSource
, [1]
是sfxSource
。