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

    −74

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    public static TSource Single<TSource>(this TSource[] array)
            {
                if (array.Length > 1) throw new InvalidOperationException("Sequence contains more than one element");
                return array[0];
            }
            public static TSource Single<TSource>(this List<TSource> array)
            {
                if (array.Count > 1) throw new InvalidOperationException("Sequence contains more than one element");
                return array[0];
            }
            public static TSource First<TSource>(this TSource[] array)
            {
                return array[0];
            }
            public static TSource First<TSource>(this List<TSource> array)
            {
                return array[0];
            }
            public static TSource First<TSource>(this TSource[] array, Func<TSource, bool> condition)
            {
                for (int i = 0; i < array.Length; i++)
                {
                    if (condition(array[i])) return array[i];
                }
                throw new InvalidOperationException("No items match the specified search criteria.");
            }
    
            public static TSource First<TSource>(this List<TSource> array, Func<TSource, bool> condition)
            {
                var len = array.Count;
                for (int i = 0; i < len; i++)
                {
                    if (condition(array[i])) return array[i];
                }
                throw new InvalidOperationException("No items match the specified search criteria.");
    }

    https://github.com/antiufo/roslyn-linq-rewrite/blob/master/RoslynLinqRewrite/Shaman.FastLinq.Sources/FastLinqExtensions.cs#L12


    Зачем тут повторяющиеся функции, отличающиеся только "TSource[]" "List<TSource>" ? В говношарп не завезли аналог плюсовых шаблонов?

    Запостил: j123123, 24 Октября 2016

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

    • в шарпе у женериков List<T1> и List<T2> разные типы, и их нельзя приводить через (List<T1>)t2list (List<T2>)t1list даже если
      class T1 : T2
      или
      class T2 : T1
      Ответить
      • Выблядок, съеби отсюда.
        Ответить
      • самозванец!
        Ответить
      • ну, вообще можно было бы написать просто
        public static TSource Single<TSource>(this IEnumerable<TSource> array)
        , и тогда не пришлось бы дублировать.
        а вообще, тут суть в том, что array и list это совсем разные типы, и их нельзя просто так привести. можно сделать List<T1>.Cast<T2>(), и он приведет их к типу.
        Ответить
        • Если мне память не изменяет TSource[] имплементит не женерик IEnumerable

          ну так Cast и обьект новый создаст
          Ответить
        • > This tool compiles C# code by first rewriting the syntax trees of LINQ expressions using plain procedural code, minimizing allocations and dynamic dispatch.

          Тут же вроде вся суть либы в том, чтобы кругом были конкретные типы, а не интерфейсы, для ПИРФОМАНСА и снижения потребления памяти. Одинарные кавычки вместо двойных, вот это всё.
          Ответить
          • Вот если б там шаблоны были, оно б само могло заспециализироваться куда надо
            Ответить
            • И гомоиконность!
              Ответить
            • Я тут, кстати, недавно выдавал реквайрменты для рефакторинга, в которых значилось "выпилить метушню на корню", ибо cost ineffective.
              Пирформанс не нужен -- бабы нарожают^W^W кастомер докупит^W^W если он ценой экономии на каких-то спичках.
              Можете начинать меня ненавидеть.
              Ответить
              • впезду метушню. надо кодогенерировать на пхп.
                Ответить
                • Метухи разметушились,
                  Но код выдать не решились.

                  Если сильно метушиться,
                  Можно парсера лишиться.

                  Если парсера лишиться,
                  Нечем будет метушиться.
                  Ответить
              • Кто бы мог подумать:

                https://uk.wiktionary.org/wiki/метушня

                http://uk.worldwidedictionary.org/метушитися
                Ответить
              • показать все, что скрытоТак ты против того чтобы в компайл тайме делать все?

                Ты за бессмысленные такты? За пустую трату горючего? Загаживание экологии?

                А ты думал в КАКОМ мире будут жить твои дети??
                Ответить
          • ват? хочешь сказать, что приведение типов к интерфейсу насилует память?
            Ответить
            • Ну в теории мешает инлайнингу и может способствовать дополнительным аллокациям вдоль потока данных в нетривиальной цепочке вычислений.
              Ответить
          • > Одинарные кавычки вместо двойных, вот это всё.
            boost::mpl::string? :)
            Ответить
          • показать все, что скрытоНапоминает как есть функции

            Write(String)
            Write(String, String)
            И так до семи примерно, ибо дешевле чем варарг
            Ответить
        • У IEnumerable<> нет индесатора, только ElementAt. Лучше так:
          public static TSource First<TSource>(this IList<TSource> seq)
          {
              return seq[0];
          }

          fixed
          Ответить
      • показать все, что скрытоА коварианты и контрварианты в твоем ссссаном пту непрохадили???
        Ответить

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