Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 14:04
Оценка: 3 (1)
Продолжаем наступать на грабли
Автор: Sinix
Дата: 26.04.16


var offsets = GetSomeOffsets();

var max = offsets.Aggregate((x, y) => x > y ? x : y);


Вопрос стандартный: что не так-то?
Подсказка: на это раз вопрос не про производительность.

Просьбы тож:
1. Спойлеры — под кат!
2. Подключайтесь Нужно боольше вопросов
Отредактировано 07.01.2017 16:46 Sinix . Предыдущая версия . Еще …
Отредактировано 28.04.2016 14:06 Sinix . Предыдущая версия .
минутка wtf
Re: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 14:15
Оценка:
Почему просто не использовать Max?
Re: Минутка WTF-8: не делайте так.
От: TimurSPB Интернет  
Дата: 28.04.16 14:16
Оценка:
S>Вопрос стандартный: что не так-то?
Непонятно что должен делать код
Make flame.politics Great Again!
Re[2]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 14:18
Оценка: +1
Код ищет максимальный элемент коллекции.
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 14:35
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Почему просто не использовать Max?


Потому что это максимально упрощённый пример, в реальном коде был цикл.
Re: Минутка WTF-8: не делайте так.
От: Codechanger Россия  
Дата: 28.04.16 15:03
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Продолжаем наступать на грабли
Автор: Sinix
Дата: 26.04.16


S>
S>var offsets = GetSomeOffsets();

S>var max = offsets.Aggregate((x, y) => x > y ? x : y);
S>


S>Вопрос стандартный: что не так-то?

S>Подсказка: на это раз вопрос не про производительность.

  Вариант ответа
Подозреваю, что там что-то с реализацией IComparable должно быть связано.
Re: Минутка WTF-8: не делайте так.
От: artelk  
Дата: 28.04.16 15:17
Оценка: 22 (1) +1
Здравствуйте, Sinix, Вы писали:

S>
S>var offsets = GetSomeOffsets();
S>var max = offsets.Aggregate((x, y) => x > y ? x : y);
S>

S>Вопрос стандартный: что не так-то?

На пустой последовательности падает?
Re[3]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 15:25
Оценка:
Цикл который ищет максимальный элемент?
Re[4]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 15:46
Оценка:
Здравствуйте, -n1l-, Вы писали:

S>>Потому что это максимально упрощённый пример, в реальном коде был цикл.

N>Цикл который ищет максимальный элемент?
Вот давайте дождёмся ответа, а потом я уже буду спойлерить
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 15:50
Оценка:
Здравствуйте, artelk, Вы писали:


S>>Вопрос стандартный: что не так-то?


A>На пустой последовательности падает?

Вот про этот момент я не подумал, но в принципе это не критично. Max() тоже бросает исключение для некоторых типов.
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 15:51
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>[cut=Вариант ответа]

Тепло
Re[3]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 16:31
Оценка: +1
Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.
Re[4]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:01
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.

Ещё теплее. Подсказка: тип значений — примитив.
Re[5]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 17:08
Оценка:
StackOverflow на больших кол-вах данных?
Re[6]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 17:09
Оценка:
Хотя нет, глупость сморозил.
Re[5]: Минутка WTF-8: не делайте так.
От: Codechanger Россия  
Дата: 28.04.16 17:11
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, -n1l-, Вы писали:


N>>Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.

S>Ещё теплее. Подсказка: тип значений — примитив.

Надо глянуть, могут ли переопределенные операторы возвращать значения другого типа
Re[6]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:13
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>StackOverflow на больших кол-вах данных?

А это с чего бы? там ни рекурсии, ни stackalloc нету. Не оно.
Re[5]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 17:20
Оценка:
Может быть возвращается объект, упаковка-распаковка, но вопрос был не про производительность.
Re[6]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:23
Оценка:
Здравствуйте, Codechanger, Вы писали:



N>>>Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.

S>>Ещё теплее. Подсказка: тип значений — примитив.

C>Надо глянуть, могут ли переопределенные операторы возвращать значения другого типа

Конечно могут
            public static C operator >(C a, C b)
            {
                return null;
            }
            public static C operator <(C a, C b)
            {
                return null;
            }

            static void PleaseStop()
            {
                C a = new C();
                C b = a < a;
                ...
            }


Не, конечно из принципа можно и не так упороться
Автор: Sinix
Дата: 19.08.15
, но в этой серии постов все сюрпризы — из реального кода, неформат получается.

Так что оператор и тип стандартные.
Re[6]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:25
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Может быть возвращается объект, упаковка-распаковка, но вопрос был не про производительность.

Ок,

  подсказка 2
На каких из примитивных типов операторы сравнения могут выдавать неочевидные результаты?


И нет, вопрос не про перформанс.
Отредактировано 28.04.2016 17:27 Sinix . Предыдущая версия . Еще …
Отредактировано 28.04.2016 17:26 Sinix . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.