Правильный вызов данных из коллекции

Объясните мне, а то не врублюсь, как будет быстрее и лучше, и почему:

Так:

A = C.B["A"].GetComponent<Button>();
F = C.B["F"].GetComponent<Button>();
B = C.B["B"].GetComponent<Button>();
H = C.B["H"].GetComponent<Button>();

Или так:

C = C.B;
A = C["A"].GetComponent<Button>();
F = C["F"].GetComponent<Button>();
B = C["B"].GetComponent<Button>();
H = C["H"].GetComponent<Button>();

Или оба варианты равны?

C.B - это коллекция new Dictionary<string, GameObject>();


Ответы (2 шт):

Автор решения: earthQuake

Самое дорого здесь это GetComponent. Лучше ваши кнопки закешировать в словаре, если так надо. Dictionary. То, о чем, вы думаете - по времени выполнения даст разницу, несоизмеримо маленькую, по сравнению с вызовом GetComponent.

А вообще, что мешает самому проверить, что здесь будет быстрее?

→ Ссылка
Автор решения: FixiDens

Я вообщем понял, бессмысленно использовать для этого Dictionary и GetComponent.
Так как естьTransform, мы можем в скрипте вызвать индекс transform.GetChild(index).

public static Transform Transform(string Name) {
    Transform tm = c.transform;
    for (int i = 0; i < tm.childCount; ++i) {
        Transform child = tm.GetChild(i);
        if (child.name.Equals(Name, StringComparison.OrdinalIgnoreCase)) {
            return child;
        }
    }
    return null;
}

public static Transform Transform(GameObject Object, string Name) {
    Transform tm = Object.transform;
    for (int i = 0; i < tm.childCount; ++i) {
        Transform child = tm.GetChild(i);
        if (child.name.Equals(Name, StringComparison.OrdinalIgnoreCase)) {
            return child;
        }
    }
    return null;
}

По этому создавать еще одну промежность в виде Dictionary<string,GameObject>, а после еще и GetComponent, никакого смысла нет.

Другое дело, на сколько быстро будет работать Equals и есть ли решения лучше, для сравнения строк, не вариант: child.name == Name.

→ Ссылка