Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储在数组中的对象实例的备用名称,C#_C#_Arrays_Unity3d_Instance - Fatal编程技术网

存储在数组中的对象实例的备用名称,C#

存储在数组中的对象实例的备用名称,C#,c#,arrays,unity3d,instance,C#,Arrays,Unity3d,Instance,我有两个相同类型的对象实例。(准确地说,这是Unity3D的AudioSource)我需要对这两个应用一些操作,如初始化、销毁等,因此我认为将它们存储在数组中是一个好主意,这样我就可以进行迭代 AudioSource[] audioSources = new AudioSource[2]; 有了它,我可以在数组上foreach,只编写一次初始化代码和其他常见任务 但这两个实例的用途不同,例如,第一个是BGM的音频源,第二个是SFX的音频源。这样代码将更具可读性,并且我仍然可以使用数组迭代两个实

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

AudioSource[] audioSources = new AudioSource[2];
有了它,我可以在数组上
foreach
,只编写一次初始化代码和其他常见任务

但这两个实例的用途不同,例如,第一个是BGM的音频源,第二个是SFX的音频源。这样代码将更具可读性,并且我仍然可以使用数组迭代两个实例

因此,我认为应该为每个实例指定一个备用名称,如
bgmSource
sfxSource
。我想问,这是正确的方法吗

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

依我看,你的解决办法似乎不错

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


这些东西的代码有望出现在AudioSource中,不是吗?

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

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


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

嗯,这是合法的。这只是偏好/设计的问题。我想你可以把它们放在某种字典里。因此,您可以通过
正确标记它们。这样,您就不需要记住
[0]
bgmSource
[1]
sfxSource
,嗯,这是合法的。这只是偏好/设计的问题。我想你可以把它们放在某种字典里。因此,您可以通过
正确标记它们。这样,您就不需要记住
[0]
bgmSource
[1]
sfxSource
,另一种解决方案是使用字典,它不太适合这样小的数组 但它可以帮助您区分对象,而无需使用第二个变量来存储引用 到数组中的一个

例如:

    Dictionary< string, AudioSource > audioSources;

    audioSources = new Dictionary<string, AudioSource> 
    { 
        "BGM_SOURCE", new AudioSource(),
        "SFX_SOURCE", new AudioSource()
    };
DictionaryaudioSources;
audioSources=新词典
{ 
“BGM_源”,新音频源(),
“SFX_源”,新音频源()
};
然后,您还可以使用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();
}
//枚举声明
枚举音频源名称
{
BGM_来源:,
SFX_源
}
//在第一次更新之前调用
公开作废开始()
{
//字典声明
字典音频源;
audioSources=新词典
{ 
(int)BGM_源,新音频源(),
(int)SFX_源,新音频源()
};
//访问字典
audioSources[(int)AudioSourceNames.BGM_SOURCE].Play();
}

顺便说一句:你可以在数组中使用枚举器技术,这样你就不必记住数组中的每个音频源索引了

另一个解决方案是使用字典,它不太适合这样小的数组 但它可以帮助您区分对象,而无需使用第二个变量来存储引用 到数组中的一个

例如:

    Dictionary< string, AudioSource > audioSources;

    audioSources = new Dictionary<string, AudioSource> 
    { 
        "BGM_SOURCE", new AudioSource(),
        "SFX_SOURCE", new AudioSource()
    };
DictionaryaudioSources;
audioSources=新词典
{ 
“BGM_源”,新音频源(),
“SFX_源”,新音频源()
};
然后,您还可以使用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();
}
//枚举声明
枚举音频源名称
{
BGM_来源:,
SFX_源
}
//在第一次更新之前调用
公开作废开始()
{
//字典声明
字典音频源;
audioSources=新词典
{ 
(int)BGM_源,新音频源(),
(int)SFX_源,新音频源()
};
//访问字典
audioSources[(int)AudioSourceNames.BGM_SOURCE].Play();
}

顺便说一句:你可以在数组中使用枚举器技术,这样你就不必记住数组中的每个音频源索引了。如果你不打算拥有更多的,你也可以省去数组,只做/调用子例程,比如
Initialize(audiosourcesrc)
。我认为两个函数调用至少与数组中的前缀一样干净,它消除了对每个对象有多个引用的复杂性。如果你不打算拥有更多的,你也可以省去数组,只做/调用子例程,比如
Initialize(audiosourcesrc)
。我认为两个函数调用至少与数组中的前缀一样干净,并且它消除了对每个对象具有多个引用的复杂性。