存储在数组中的对象实例的替代名称,c#

本文关键字:实例 数组 对象 存储 | 更新日期: 2023-09-27 18:17:51

我有两个相同类型的对象实例。(准确地说,这是Unity3D的AudioSource)我需要应用一些动作,如初始化,销毁等,所以我认为将它们存储在一个数组将是一个好主意,所以我可以迭代。

AudioSource[] audioSources = new AudioSource[2];

有了这个,我可以在数组上foreach,并且只写一次初始化代码和其他常见任务。

但是这两个实例服务于不同的目的,比如说,第一个是用于BGM的AudioSource,第二个是用于SFX的。通过这种方式,代码将更具可读性,并且我仍然可以通过使用数组迭代两个实例。

所以我认为我应该给每个实例一个替代名称,如bgmSourcesfxSource。我想问,这是正确的做法吗?

AudioSource bgmSource = audioSources[0];
AudioSource sfxSource = audioSources[1];

存储在数组中的对象实例的替代名称,c#

另一个解决方案是使用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索引

在我看来,你的解决方案似乎不错。

只初始化一次代码和其他常见任务

这些东西的代码希望在AudioSource,不是吗?

这是合法的。这只是一个喜好/设计的问题。我会说你可以把它们放进某种字典里。所以你可以通过key正确地标记它们。这样你就不需要记住 [0]bgmSource, [1]sfxSource