1. C# / Говнокод #14244

    +138

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Control authorizationPanel= iddbd
          .Controls.Cast<Control>().Where(x => x.Name == "panelMaxim").FirstOrDefault()
          .Controls.Cast<Control>().Where(x => x.Name == "panelInternetB").FirstOrDefault()
          .Controls.Cast<Control>().Where(x => x.Name == "panelPassiveIB").FirstOrDefault()
          .Controls.Cast<Control>().Where(x => x.Name == "panelPhone").FirstOrDefault();

    не, ну а как его еще достать? У нас это квест такой на работе - "Найди контрол" называется

    Запостил: taburetka, 18 Декабря 2013

    Комментарии (17) RSS

    • .AssParallel?
      Ответить
    • #Query
      Ответить
    • > iddbd
      Даже iddqd написать правильно не смог :)
      Ответить
    • Интересно, какой Control подразумевается под default в FirstOrDefault? :) null?
      Ответить
      • Ну так а что же еще? Не будет же оно возвращать панельку не привязанную к форме и править ее. Вылет с эксепшеном гораздо удачнее
        Ответить
        • А зачем пачка кастов? Если внутри контролов один хрен могут быть только контролы. Или не только?
          Ответить
          • >Если внутри контролов один хрен могут быть только контролы

            Капитан не дремлет)

            >> А зачем пачка кастов?

            видимо кому то было скучно и одиноко
            Ответить
          • без этих кастов вроде LINQ не будет работать
            Ответить
            • Ну тут и linq то не нужен. И даже он юзается тут неправильно

              "Правильно" будет так

              .Controls.Cast<Control>().FirstOrDefault (x => x.Name == "panelMaxim");
              Ответить
              • а как бы можно было это реализовать без LINQ?
                Ответить
              • можно было бы теоретически написать extension метод для поиска контрола рекурсивно типа:
                public static Control FindControl(this Control root, string name) {
                    foreach(Control child in root.Controls) {
                        if(child.Name == name) return child;
                        Control found = FindControl(child, name);
                        if(found != null) return found;
                    }
                    return null;
                }
                Ответить
                • ну или самому писать.

                  Хотя ответ более чем очевиден - нормально хранить данные нужно
                  Ответить
          • а если конкретно, то ControlCollection коллекция имплементует интерфейс IEnumerable но не имплементует IEnumerable<T>. Поэтому нужен каст чтобы коллекция стала строго типизированной и LINQ мог создать свои методы.
            Ответить

    Добавить комментарий