• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

optymalizacja zagniezdzonych ifow c#

VPS Starter Arubacloud
0 głosów
321 wizyt
pytanie zadane 16 listopada 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)
edycja 16 listopada 2016 przez Alex.Ironside
Witam. Nie wiem co jest w tej petli blednie zrobione. Wg kompilatora jest niesprecyzowany wyjatek. Jakies pomysly? Kod wykomentowany to oryginal a ten w forze jest proba optymalizacji. Wykomentowany dziala. Comboboxes[] to tablica w ktorej sa wszystkie comboboxy

//if (comboBox1.Text == "Cheese" || comboBox1.Text == "Vegetable" || comboBox1.Text == "Meat")
            //{
            //    if (comboBox2.Text == "Cheese" || comboBox2.Text == "Vegetable" || comboBox2.Text == "Meat")
            //    {
            //        if (comboBox3.Text == "Cheese" || comboBox3.Text == "Vegetable" || comboBox3.Text == "Meat")
            //        {
            //            return true;
            //        }
            //        else { comboBox3.Text = "Wrong input"; return false; }
            //    }
            //    else { comboBox2.Text = "Wrong input"; return false; }
            //}
            //else { comboBox1.Text = "Wrong input"; return false; }
            int isvalid = 0;
            for (int i = 0; i < 3; i++)
            {
                if (ComboBoxes[i].Text == "Cheese" || ComboBoxes[i].Text == "Vegetable" || ComboBoxes[i].Text == "Meat")
                {
                    isvalid++;
                }
                else { ComboBoxes[i].Text = "Wrong input"; }
            }
            if (isvalid == 3)
            { return true; }
            else { return false; }

 

komentarz 16 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)

Zastosuj try i catch i dowiesz się co to za błąd. Prawdopodobnie wychodzisz poza zakres tablicy/listy lub odwołujesz się do null.

komentarz 16 listopada 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
yyy a cos wiecej? xD
komentarz 16 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)
edycja 16 listopada 2016 przez JAKUBW
try{
int isvalid = 0;
            for (int i = 0; i < 3; i++)
            {
                if (ComboBoxes[i].Text == "Cheese" || ComboBoxes[i].Text == "Vegetable" || ComboBoxes[i].Text == "Meat")
                {
                    isvalid++;
                }
                else { ComboBoxes[i].Text = "Wrong input"; }
            }
            if (isvalid == 3)
            { return true; }
            else { return false; }
}
catch(Exception e){
Console.WriteLine(e);
Console.ReadKey();
}

Jeżeli nie korzystasz z konsoli to wyświetl sobie w postaci messagebox'a

komentarz 16 listopada 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
MessageBox.Show(e) nie moze przekonwertowac tego na string.
komentarz 16 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)

e.ToString(); podstawy c#... 

Ale lepiej w MessageBox e.Message. 

1 odpowiedź

0 głosów
odpowiedź 16 listopada 2016 przez Sareley Gaduła (4,740 p.)
wybrane 30 listopada 2016 przez Alex.Ironside
 
Najlepsza

Po prostu użyj debuggera do sprawdzenia błędu. Załóż break point-y w kilku miejscach i uruchom program w trybie debug i zobacz w którym miejscu wyrzuca aplikację.

Równie dobrze te porównywania stringów mógłbyś wrzucić do tablicy stringów i sprawdzać czy tekst z comboBoxów jest w kolekcji zamiast rozbudowywać tak cały warunek. Np coś takiego:

 int isvalid = 0;
string [] values= {"Cheese","Vegetable","Meat"};

            for (int i = 0; i < ComboBoxes.Length; i++)
            {
                if (values.Contains(ComboBoxes[i].Text))
                {
                    isvalid++;
                }
                else { ComboBoxes[i].Text = "Wrong input"; }
            }

            if (isvalid == 3)
            { return true; }
            else { return false; }

Pisze to z głowy więc nie gwarantuje że wszystko będzie poprawnie :)

Zamiast pętli for mógłbyś również użyć pętli foreach wtedy od razu masz zapewnione sprawdzanie wielkości kolekcji.

komentarz 17 listopada 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
Dobry pomysl z ta tablica stringow

Podobne pytania

0 głosów
1 odpowiedź 272 wizyt
0 głosów
1 odpowiedź 179 wizyt
0 głosów
0 odpowiedzi 300 wizyt
pytanie zadane 29 stycznia 2022 w C i C++ przez tymoty883 Nowicjusz (120 p.)

92,959 zapytań

141,921 odpowiedzi

321,152 komentarzy

62,293 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...