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

    +100

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    int i = 0;
    foreach (SomeType item in someCollection)
    {
        if (i > 0) break;
    
        // ... обрабатываем item
    }

    Берём первый элемент коллекции и обрабатываем...

    Запостил: kore_sar, 15 Апреля 2013

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

    • Зато не надо проверять на пустую коллекцию
      Ответить
      • но надо проверять на null
        Ответить
        • ну это легко сделать: someCollection ?? new List<T>()
          Ответить
          • Съешь ещё этих мягких душистых пустых списков?
            Проверять на null вруг стало настолько немодно? Решение старомодных жаболюбов:
            if (c != null && !c.isEmpty()) {
                Item item = c.iterator().next(); // or c.get(0) if c is a list
                // process item
            }
            Ответить
            • >Проверять на null вруг стало настолько немодно?
              Я вот я запарился. Уже пару лет как юзаю такие самописные методы
              static <T>Iterable<T> noNull(Iterable<T> it){
                 return (null==it) ? Collections.emptySet() : it;
              }

              итд..
              Ну и
              for (A a: noNull(coll) ){
              }

              >if (c != null && !c.isEmpty()) {
              Ну вот. Опять же. Сделай себе статику, которая проверяет на null и empty и будет счастье
              if (!isEmpty(coll))

              >??
              Отвратительный мс-сахарок, честно говоря. Чем меньше в языке/коде непонятных символов - тем лучше.
              Ответить
              • Я предпочитаю просто никогда не возвращать null из методов, возращающих коллекцию. Если весь код написан в таком стиле, то все счастливы: не нужны постоянные проверки, да и NPE не всплывёт.
                Если приходится работать с чужим кодом, который не следует аналогичным удобным соглашениям, то пишу такие же обёртки.
                Ответить
                • Согласен, очень печалит, когда метод за место пустого списка возвращает null
                  Ответить
              • У меня всегда по рукой есть свои экстеншен методы. Использую так:
                if (!someCollection.IsCollectionNullOrEmpty ()) {
                var item = someCollection.First();
                }

                Читабельность 100%
                Ответить
                • > есть свои экстеншен методы
                  Ну по сути та же статика, только посахаристее, и без скобок.
                  Ответить
      • Сарказм детектед.
        Ответить
    • Я прямо таки посмаковал.
      А коллекция случайно не является массивом?
      Ответить
    • Смотря что за коллекция... У Set'a (или как он в решётках зовётся?) нельзя взять произвольный элемент по индексу, поэтому либо так, либо через итератор - "шо то хуйня, шо это" ©
      Ответить
      • Да ну. С итератором всяко будет нагляднее чем эта срань.

        Другое дело - зачем брать первый (вернее какой-нибудь, если он неупорядоченный) элемент set'а? Что-то у меня такой необходимости не возникало... или я просто не умею выбирать структуры данных? ;)
        Ответить
        • P.S. А ну да - priority queue с уникальными элементами. Ок.
          Ответить
    • Раньше тоже так делал, пока не узнал про метод FirstOrDefault();
      Ответить

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