Czy "Dictionary.Keys.ToList()" jest bezpieczne?

0

Przeczytałem, że właściwość Keys klasy Dictionary nie musi zwracać za każdym razem tej zbioru w tej samej klasie, zwłaszcza kiedy elementy są dodawane/usuwane. A co jeżeli mam obiekt dictionary, który ma klauzurę readonly i wypełniany jest danymi w konstruktorze, czy mogę mieć pewność że kolejność będzie zachowana?

1

To jest źle zadane pytanie.

Kolejność elementów zwracana przez Keys jest nieokreślona. I na tym należy przerwać rozmyślanie.
Jeśli zależy ci na konkretnej kolejności, to sobie posortuj. Albo użyj innego kontenera...

0

Mój kontener wygląda dokładnie tak:

 private readonly Dictionary<Button, Tuple<Image, Image>> menuButtons;

Słownik dla każdego przycisku przechowuje dwa obrazki: stan zwykły, stan zaznaczony. Jednocześnie może być zaznaczony jeden przycisk. Mam funkcję do zmiany zaznaczonego przyciska za pomocą strzałek:

if (keyData == Keys.Left || keyData == Keys.Right)
                {
                    // It is dangerous
                    List<Button> buttons = menuButtons.Keys.ToList();
                    int indexButton = buttons.IndexOf(SelectedButton) + ((keyData == Keys.Left) ? -1 : 1);
                    if (indexButton < 0) indexButton = 0;
                    else if (indexButton >= buttons.Count) indexButton = buttons.Count - 1;
                    SelectedButton = buttons[indexButton];
                }

Przyciski są ustawione jeden za drugim i w takiej kolejności są dodawane do słownika. W takim razie jaki kontener powinienem użyć aby rozwiązać mój problem?

0

Dictionary OK do przechowywania obrazków, ale kolejność przycisków trzymaj w List albo czymś podobnym, niezależnym od Dictionary.

0

Dzięki za radę :) zrobiłem jak napisałeś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1