|
async await в c#
|
|||
---|---|---|---|
#18+
вот здесь статистика ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:01 |
|
async await в c#
|
|||
---|---|---|---|
#18+
listtoview, про что вообще вопрос? про PHP? так иди в соответсвующий раздел форума, тебе там расскажут про php-fpm и прочее ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:05 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Не стоит судить по какому-то видео из интернета, что "при 500 запросов половина отваливается, если синхронно". Изучи лучше как утроен механизм рабочих потоков (WorkerThreads) в IIS и что в нём можно изменить на конкретном железе через конфигурацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:11 |
|
async await в c#
|
|||
---|---|---|---|
#18+
listtoview А как же на пхп например сайты держат тысячи пользователей Открой для себя такие понятия, как ферма, балансировка нагрузки. Там может быть 10 серверов на бекенде. Ну и это твоё "держат тысячи пользователей" - влажные фантазии. 1000 запросов в секунду - это уже уровень сайтов типа StackOverflow с нехилой такой аудиторией. А там как раз множество бекендов и балансировка нагрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:19 |
|
async await в c#
|
|||
---|---|---|---|
#18+
listtoview А как же на пхп например сайты держат тысячи пользователей Разработчики языка PHP в своё время принесли в жертву быка и 10 девственниц. Один из разработчиков выполнил ритуальное публичное самососжение. Вот почему PHP держит тысячи пользователей, а остальные вынуждены выдумывать какие-то костыли, чтобы хоть как-то приблизиться к нему. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 23:43 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Дед в ролике правильный - PowerShell, Git в консоли, features ветки, Test Explorer в студии сразу же закладкой сбоку открыт. Зачетно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 01:04 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat, Мужик юзает IReadOnly*** коллекции, а не две идиотские крайности: List<T> или IEnumerable<T>... Прям тепло на душе стало :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 03:07 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Мужик юзает IReadOnly*** коллекции, а не две идиотские крайности: List<T> или IEnumerable<T>... IEnumerable<T> это, так-то, тоже read-only коллекция :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 08:38 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat IEnumerable<T> это, так-то, тоже read-only коллекция :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 09:44 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Shocker.Pro fkthat IEnumerable<T> это, так-то, тоже read-only коллекция :)) Смотря что считать коллекцией :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 09:52 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt Мужик юзает IReadOnly*** коллекции, а не две идиотские крайности: List<T> или IEnumerable<T>... IEnumerable<T> это, так-то, тоже read-only коллекция :)) В том-то и дело, что нет. Если ожидать на вход, то в целом ок, так как ленивые вычисления, максимально обобщённый интерфейс. Но в 90% случаев ленивость не нужна, и функция либо по нескольку раз перебирает последовательность, либо материализует в список/массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 13:33 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Смотря что считать коллекцией :)) У коллекции есть количество элементов. Если количества нет, это бесконечная последовательность. И подходы, соответственно, разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 13:34 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt и функция либо по нескольку раз перебирает последовательность, либо материализует в список/массив А вот, на самом деле, и нет (если ты про Linq) :)). Он достаточно умный, чтобы сначала проверить, что на самом деле за IEnumerable<T> спряталось и сразу тупо пересчитывать все элементы IEnumerable не станет. Вот код Count() из дотнета: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 14:31 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt У коллекции есть количество элементов. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 14:42 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat А вот, на самом деле, и нет (если ты про Linq) :)). Он достаточно умный, чтобы сначала проверить, что на самом деле за IEnumerable<T> спряталось и сразу тупо пересчитывать все элементы IEnumerable не станет. Это не "достаточно умный" -- это необходимая "оптимизация" из-за чрезмерного злоупотребления этим интерфейсом. fkthat Вот код Count() из дотнета: Знаю я про эти костыли :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 14:46 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt У коллекции есть количество элементов. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Ну это уже жесть... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
О боже, оказывается никакой интерфейс не даёт 100% гарантий реализации!? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 14:50 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Ну это уже жесть... А ты попробуй вот такое: Код: c# 1. 2.
С т.з. компиляции код безупречный и классы/интерфейсы все прямо из фреймворка - никакой самодеятельности. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 14:56 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat А ты попробуй вот такое: Код: c# 1. 2.
С т.з. компиляции код безупречный и классы/интерфейсы все прямо из фреймворка - никакой самодеятельности. Если ты получишь интерфейс IReadOnlyCollection, ты не можешь изменить коллекцию, если не будешь заниматься рефлексией и другой самодеятельностью. Собственно, тоже самое можно сделать и с IEnumerable, но так делать нельзя, на любом ревью по рукам надают, если не по голове :) Иначе так можно сказать, что и до приватных полей можно добраться и private это фикция. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 16:01 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat, А, насчёт ReadOnlyCollection (реализация) -- проблема в том, что он наследуют ICollection, это легаси, IReadOnly**** интерфейсы были добавлены позже и невозможно от них отнаследовать уже существующие интерфейсы. Поэтому сейчас в .NET-е наблюдается неконсистентная каша из интерфейсов и реализаций. По сути надо с нуля перерабатывать FCL. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 16:04 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt, Можно еще Stream взять как пример (это хоть и не интерфейс, но все-таки абстрвкция) - большая часть свойств/методов в овердофига случаях поддерживаться в принципе не могут и всегда будут кидать ексепшен. hVostt Поэтому сейчас в .NET-е наблюдается неконсистентная каша из интерфейсов и реализаций. Так значит .NET гамно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 16:30 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Можно еще Stream взять как пример (это хоть и не интерфейс, но все-таки абстрвкция) - большая часть свойств/методов в овердофига случаях поддерживаться в принципе не могут и всегда будут кидать ексепшен. Stream это апофеоз неудачного дизайна :( fkthat Так значит .NET гамно? Да везде такая фигня. В .NET всё же намного лучше, чем в Java. Просто нужно это принимать. Самое главное понимать, что если есть какая-то возможность, это не значит что ей надо бездумно пользоваться. Например, вот это полная дичь: Код: c# 1. 2. 3. 4. 5. 6. 7.
Просто это уже по умолчанию бездумно. Некоторые из новичков даже не знают, что есть массивы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 17:36 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt вот это полная дичь Это кал безотносительно к тому, что там для SomeItems используется. Но, если сделать так: Код: c# 1.
то вполне себе норм. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 01:05 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt, Я просто не вижу каких-то прямо железобетонных причин чтобы между IReadOnlyCollection<T> и IEnumerable<T> выбирать всегда что-то одно. С одной стороны, IReadOnlyCollection не даст в случае рукожопия наступить на грабли со всяким "deffered", но с другой стороны оно и не даст в случае нерукожопия преимущества этого самого "deffered" использовать. Отличия, в конце-концов, только в наличии одного свойства, которое, даже и не вспомню когда мне нужно было. Тут, скорее, просто дело привычки и/или принятых соглашений. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 01:53 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Это кал безотносительно к тому, что там для SomeItems используется. Но, если сделать так: Код: c# 1.
то вполне себе норм. Не, это говнокод. В дтошке должна быть коллекция, или массив. fkthat Я просто не вижу каких-то прямо железобетонных причин чтобы между IReadOnlyCollection<T> и IEnumerable<T> выбирать всегда что-то одно. С одной стороны, IReadOnlyCollection не даст в случае рукожопия наступить на грабли со всяким "deffered", но с другой стороны оно и не даст в случае нерукожопия преимущества этого самого "deffered" использовать. Отличия, в конце-концов, только в наличии одного свойства, которое, даже и не вспомню когда мне нужно было. Тут, скорее, просто дело привычки и/или принятых соглашений. Дело в семантике. Плюс в производительности. Ну и да, там где стараются не говнокодить и принимают соглашения, это сразу продумано. Я бы сказал, бездумное пихание IEnumerable -- это изначально принятый формат говнокодинга, отсутствие соглашений и по сути принят подход когда каждый разработчик пишет так как ему "нравится". Типа я художник, я так вижу, а у нас художники идут лесом, так как программирование -- это инженерная дисциплина, а не бабский модный фешен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 07:51 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt говнокод hVostt формат говнокодинга При этом ни одного аргумента. А hVostt В дтошке должна быть коллекция, или массив hVostt я художник, я так вижу, ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 09:19 |
|
async await в c#
|
|||
---|---|---|---|
#18+
2_fkthat, сам же знаешь, что не прав, но набрасываешь на вентилятор ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:41 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Roman Mejtes 2_fkthat, сам же знаешь, что не прав, но набрасываешь на вентилятор Ну так кто-нибудь объяснит толком, в чем неправ? Пока что никаких аргументов кроме "это говнокод, потому что я считаю это говнокодом" я не увидел. Возможно, плохо смотрел. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:51 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Roman Mejtes 2_fkthat, сам же знаешь, что не прав, но набрасываешь на вентилятор Ну так кто-нибудь объяснит толком, в чем неправ? Пока что никаких аргументов кроме "это говнокод, потому что я считаю это говнокодом" я не увидел. Возможно, плохо смотрел. Ваша музыка говно, потому что она говно © ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 19:51 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Roman Mejtes 2_fkthat, сам же знаешь, что не прав, но набрасываешь на вентилятор Ну так кто-нибудь объяснит толком, в чем неправ? Пока что никаких аргументов кроме "это говнокод, потому что я считаю это говнокодом" я не увидел. Возможно, плохо смотрел. Я тоже не понял, чем плохо IEnumerable в Dto. "Музыка говно" - так себе аргумент ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 18:46 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt fkthat, Мужик юзает IReadOnly*** коллекции, а не две идиотские крайности: List<T> или IEnumerable<T>... Прям тепло на душе стало :) Ты часто про эти крайности. Аргументировать можешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 18:48 |
|
async await в c#
|
|||
---|---|---|---|
#18+
love_bach fkthat пропущено... Ну так кто-нибудь объяснит толком, в чем неправ? Пока что никаких аргументов кроме "это говнокод, потому что я считаю это говнокодом" я не увидел. Возможно, плохо смотрел. Я тоже не понял, чем плохо IEnumerable в Dto. "Музыка говно" - так себе аргумент Это состояние объекта - лучше, чтобы оно несло больше информации. А если я захочу узнать кол-во элементов, то придется выполнять дополнительную логику по вызову IEnumerable.Count(). А если это List<T> или, IReadOnlyCollection - то просто получаем его через свойство. А IEnumerable<T> удобно юзать в конкретных действиях, то есть, например, мы знаем, что нам надо только перебрать эту коллекцию, и обновить состояния, и больше ничего, то IEnumerable зайдет. Это вопрос интерфейсов взаимодействия - что надо для работы, то и запрашиваешь, типа того. Не музыка гавно, а конкретный исполнитель. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 20:49 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Kusanagi А если это List<T> Возвращать конкретный класс вместо абстракции это вообще ни разу нет. Против конкретно IReadOnlyCollection я ничего не имею, писал просто о том, что не вижу каких-то особых причин топить за него против IEnumerable, равно как и наоборот. IEnumerable это самая абстрактная абстракция любой коллекции, а чем более абстракные абстракции ты в коде используешь, тем этот код в конечном результате гибче. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 21:40 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Да блин. Передача интерфейса коллекции предотвращает перебор. Потребитель IEnumerable не знает, можно ли спокойно перебирать твой IEnumerable или нужно его материализовывать. При этом IEnumerable обычно ленивый, он для таких кейсов и предназначен. Вот я помню делал метод, который давал на выходе IEnumerable<XNode> и который - перебирал папки на ftp - скачивал оттуда zip-файлы по одному - распаковывал из них лежащие внутри xml-файлы (по одному) - в конкретном файле перебирал ноды по заранее заданному пути и возвращал их Смысл в том, что нужно было на ftp найти нужный файл по содержимому, при этом абстрагировать поисковик от источника интерфейсом. Именно интерфейс IEnumerable позволял прервать весь процесс, как только найден нужный файл. И что? Если ты попытаешься проитерировать несколько раз этот результат - ты несколько раз будешь качать мегабайты файлов с интернета. Для того тебе и дается интерфейс IEnumerable, чтобы ты понимал, что он ленивый и не надо его итерировать несколько раз. А когда тебе возвращают коллекцию, ты понимаешь, что это фиксированный результат, итерировать его можно, материализовывать лишний раз не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 22:27 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Shocker.Pro Потребитель IEnumerable не знает, можно ли спокойно перебирать твой IEnumerable или нужно его материализовывать. Так перебирать-то можно спокойно, на то он и I_ Enum _erable. А материализовывать нужно только если это нужно. А в случае с возвратом коллекции её так или иначе придется материализовывать в реализации интерфейса и повлиять на это ты уже никак не можешь, даже если тебе "снаружи" эта материализация вообще не нужна. Вот, допустим, я ради своего чувства прекрасного написал такой метод в интерфейсе: Код: c# 1.
а тебе его реализовывать. И ты сидишь, и проклинаешь мое рукожопие, потому что тебе надо из-за моей причуды сто пятисотгиговых файлов с ftp качать. Конечно, ты выкрутишься, напрример, кастомной реализацией (допустим, Count получать простым запросом "ls", а сами файлы "лениво"), но оно разве надо эти костыли мастерить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 23:57 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt говнокод hVostt формат говнокодинга При этом ни одного аргумента. Зачем ты меня заставляешь повторяться? Я всё сказал, но ты игнорируешь. Семантически IEnumerable -- это бесконечная ленивая последовательность. За ней легко может быть генератор (yield), ленивая выборка из БД или из внешнего сервиса. Каждый повторный проход по такой последовательности может легко приводить к повторным вычислениям, повторным запросам к БД или к внешнему сервису. Плюс, повторный проход может абсолютно легально по интерфейсу и семантике возвращать разный результат и разное количество. Массив, IReadOnlyCollection/List -- это семантически неизменная материальная коллекция. По ней можно безопасно ходить сколько угодно раз. У неё есть заранее известное количество. Уместно принимать на вход IEnumerable, когда мы знаем, что данные будут обработаны одним проходом. Возвращать также уместно в том случае, когда это не обязательно коллекция, а что угодно. Любая реализация. Если ты не знаешь когда тебе применять IEnumerable, значит есть проблемы с пониманием того, как писать хорошо сопровождаемый, ясный, правильный код, в котором возможность выстрелить себе в ногу сведены к минимуму. fkthat А hVostt В дтошке должна быть коллекция, или массив hVostt я художник, я так вижу, Я вроде всё достаточно ясно пояснил. ДТО-шка это материализованный, конечный результат. Так как он используется для сериализации/десериализации, то коллекции в нём должны быть коллекциями, а не ленивыми последовательностями. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 12:45 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Roman Mejtes 2_fkthat, сам же знаешь, что не прав, но набрасываешь на вентилятор Ну так кто-нибудь объяснит толком, в чем неправ? Пока что никаких аргументов кроме "это говнокод, потому что я считаю это говнокодом" я не увидел. Возможно, плохо смотрел. Да ты просто не читал, что я писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 12:46 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Возвращать конкретный класс вместо абстракции это вообще ни разу нет. Против конкретно IReadOnlyCollection я ничего не имею, писал просто о том, что не вижу каких-то особых причин топить за него против IEnumerable, равно как и наоборот. IEnumerable это самая абстрактная абстракция любой коллекции, а чем более абстракные абстракции ты в коде используешь, тем этот код в конечном результате гибче. Нельзя "ничего не иметь против", каждый инструмент нужно применять по назначению. Просто за IEnumerable новички, любители видят коллекцию -- но это не так. Как только придёт осознание, что IEnumerable это не коллекция, а ленивая бесконечная последовательность, то всё станет на свои места. Тогда будет понятно когда применять IEnumerable, а когда интерфейсы коллекций или массивы. Если такого понимания нет, то нужно прежде к нему прийти, а потом дискутировать дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 12:48 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Вот, допустим, я ради своего чувства прекрасного написал такой метод в интерфейсе: Код: c# 1.
а тебе его реализовывать. И ты сидишь, и проклинаешь мое рукожопие, потому что тебе надо из-за моей причуды сто пятисотгиговых файлов с ftp качать. Конечно, ты выкрутишься, напрример, кастомной реализацией (допустим, Count получать простым запросом "ls", а сами файлы "лениво"), но оно разве надо эти костыли мастерить? Его не надо реализовывать. Здесь, например, ты явно говоришь, что возвращаешь материализованную коллекцию, значит от FTP можно отцепиться, а не держать коннект. Бла, ну разве это не очевидно? ))) Я как бы не против. Но свои пояснения, довольно конкретные я дал. Никого принуждать ни к чему не собираюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 12:50 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt ДТО-шка это материализованный, конечный результат. ДТО-шка это всего лишь "непонятная х...ня" для того чтобы передать что-то куда-то как один объект. hVostt Так как он используется для сериализации/десериализации, то коллекции в нём должны быть коллекциями, а не ленивыми последовательностями. Ленивая последовательность точно так же прекрасно и сериализуется и мепится, и все что угодно, что требует только её перебора. hVostt Семантически IEnumerable -- это бесконечная ленивая последовательность Где написано, что она обязательно бесконечная, обязательно ленивая, и, даже, обязательно последовательность? Для меня IEnumerable это просто "то, что можно поэлементно перебрать". hVostt IReadOnlyCollection/List -- это семантически неизменная материальная коллекция Это всего лишь интерфейс, который сам по себе не дает даже никакой гарантии, что последовательные вызовы Count и Count() вернут одно и тоже. То что она "ReadOnly" означает только то, что тебе она не выставляет методы для изменения, но не означает, что её никто вообще не может поменять. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:01 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat, Я тебе пример факапа приведу, как раз из самого свежего на моих проектах. На одном проекте, который достался по наследству, джамшуты в ДТОшках юзали IEnumerable. Всё вроде работало, а потом после очередной доработки всё накрылось п..дой. Что сделали? В одном методе добавили кеширование результата, ДТО-шки, в которой был IEnumerable. А заполнялся он лениво с вычислениями, походами в две разные БД. Разработчик сделал всё правильно. Видит, в ДТО-шке IEnumerable, сервис возвращает IEnumerable, ну и присвоил, по типам всё ок. Ругать его за это нельзя. Ругать надо криворуких рукожопов, которые не могли использовать массив или интерфейс коллекции в ДТО, тогда разработчик физически должен был материлизовать полученный IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:03 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt Семантически IEnumerable -- это бесконечная ленивая последовательность Где написано, что она обязательно бесконечная, обязательно ленивая, и, даже, обязательно последовательность? Для меня IEnumerable это просто "то, что можно поэлементно перебрать". Ну перебери мне это: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:05 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt IReadOnlyCollection/List -- это семантически неизменная материальная коллекция Это всего лишь интерфейс, который сам по себе не дает даже никакой гарантии, что последовательные вызовы Count и Count() вернут одно и тоже. То что она "ReadOnly" означает только то, что тебе она не выставляет методы для изменения, но не означает, что её никто вообще не может поменять. Ни один интерфейс не даёт 100% гарантии реализации. Я тебе и IEnumerable могу реализовать, которые будет делать что угодно, и плеваться исключениями в зависимости от фазы луны. Сам интерфейс -- это контракт. И да, контракт IReadOnlyCollection обещает, что никто не будет коллекцию менять, и что она неизменна. А кривая реализация, это уже либо саботаж, либо рукожопство. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:07 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Ругать надо криворуких рукожопов Рукожопый как раз тот, кто кешировал IEnumerable не материализуя его. И ругать надо именно его. hVostt Ну перебери мне это Почему бы нет, легко. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:16 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt И да, контракт IReadOnlyCollection обещает, что никто не будет коллекцию менять, и что она неизменна. Ничего он не обещает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:19 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt А кривая реализация, это уже либо саботаж, либо рукожопство. T[], List<T>, HashSet<T>, Stack<T>, Queue<T> это все кривые реализации рукожопых саботажников ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:22 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt А кривая реализация, это уже либо саботаж, либо рукожопство. T[], List<T>, HashSet<T>, Stack<T>, Queue<T> это все кривые реализации рукожопых саботажников ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:33 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Shocker.Pro Ты привел примеры реализации коллекций Я привел примеры кривых и рукожопых реализаций IReadOnlyCollection - все они его реализуют :)) Говоря более обще - "read only" это еще не обязательно "immutable". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:37 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt Ругать надо криворуких рукожопов Рукожопый как раз тот, кто кешировал IEnumerable не материализуя его. И ругать надо именно его. Кешировали ДТО-шку. Всё абсолютно легально. Нет, ругать его никто не собирался -- в команде это признали, не его косяк. fkthat hVostt И да, контракт IReadOnlyCollection обещает, что никто не будет коллекцию менять, и что она неизменна. Ничего он не обещает. Represents a strongly-typed, read-only collection of elements. Обещает. И по описанию, и по названию. fkthat hVostt А кривая реализация, это уже либо саботаж, либо рукожопство. T[], List<T>, HashSet<T>, Stack<T>, Queue<T> это все кривые реализации рукожопых саботажников Вообще не понял в чём посыл. fkthat Shocker.Pro Ты привел примеры реализации коллекций Я привел примеры кривых и рукожопых реализаций IReadOnlyCollection - все они его реализуют :)) Говоря более обще - "read only" это еще не обязательно "immutable". Не обязательно, всё верно. Передавая интерфейс IReadOnly -- гарантируется, что по ссылке на интерфейс коллекция не будет ни кем не изменена. Но владелец конечно изменить её может, это по сути косяк FCL, так как эти интерфейсы были добавлены слишком поздно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:49 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt что по ссылке на интерфейс коллекция не будет ни кем не изменена Вот именно. hVostt это по сути косяк FCL Это не косяк, потому "наследование" контракта (интерфейса), на самом деле, с наследованием не имеет ничего общего. hVostt Кешировали ДТО-шку. Всё абсолютно легально. Нет, нелегально. Если совсем строго говорить, то DTO это https://martinfowler.com/eaaCatalog/dataTransferObject.html An object that carries data between processes in order to reduce the number of method calls. Про кеширование там ни слова. Точно так же я могу "увидеть" сущность из DbContext и положить её в кеш, не задумываясь, что там могут быть "ленивые" свойства. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 14:01 |
|
async await в c#
|
|||
---|---|---|---|
#18+
А все это время на ПХП пишут сайты с поддержкой миллиардов одновременных коннектов и не запариваются о каком-то там риад-онли ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 14:15 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat А все это время на ПХП пишут сайты с поддержкой миллиардов одновременных коннектов и не запариваются о каком-то там риад-онли ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 14:32 |
|
async await в c#
|
|||
---|---|---|---|
#18+
Shocker.Pro Ты это, раз с VB.NET не вышло, переходи на ПХП, смотри сколько там сладкого недавно вышло Я еще несколько лет назад заглянул из любопытсва в книгу по ПХП. Да, в общем-то, язык как язык - там и ОО есть, и абстракции, и DI, и проч. Но, вот загадка загадок - почему же все-таки тогда на нем такой адский код все время пишут? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 14:44 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Про кеширование там ни слова. Точно так же я могу "увидеть" сущность из DbContext и положить её в кеш, не задумываясь, что там могут быть "ленивые" свойства. всё правильно не надо задумываться.. на сим, думаю пора закончить полемику, тут уже всё ясно ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:29 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Но, вот загадка загадок - почему же все-таки тогда на нем такой адский код все время пишут? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:38 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Вот именно. hVostt это по сути косяк FCL Это не косяк, потому "наследование" контракта (интерфейса), на самом деле, с наследованием не имеет ничего общего. Ну я вроде дал чёткие осмысленные аргументы. Хотелось бы нормальные контраргументы, а не демагогию :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:45 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt всё правильно не надо задумываться.. на сим, думаю пора закончить полемику, тут уже всё ясно Ну а что человек увидел ДТО и положил его в кеш не думая. Завтра он точно так же не думая положит в кеш ссылку на Stream. И кто ему тогда "рукожопый виноват"? Класть в кеш что-то мутабельное это будет уже, по сути, рукожопый дизайн. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:47 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Ну а что человек увидел ДТО и положил его в кеш не думая. Завтра он точно так же не думая положит в кеш ссылку на Stream. И кто ему тогда "рукожопый виноват"? Класть в кеш что-то мутабельное это будет уже, по сути, рукожопый дизайн. Рукожопый дизайн это не "класть", а "давать класть". Если у тебя в DTO свойство типа IEnumerable, значит ты _даёшь_ возможность покласть всякую хрень. Поэтому нужно конкретизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:53 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Хотелось бы нормальные контраргументы, а не демагогию :) При чем тут демагогия. Наследование это заявка объекта "Я есть что-то", а реализация или "типа как наследование" контракта-интерфейса это "Я умею то-то". Read-write коллекция умеет все что умеет read-only коллекция, но при этом ей не является , т.к. может изменяться. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:53 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Поэтому нужно конкретизировать. Зачем это конкретизировать, если задачи DTO (сериализация, передача данных) IEnumerable полностью решает. Кому-то когда-нибудь придет потом в голову этим DTO еще и гвозди заколачивать - это тоже надо заранее предвидеть и под это заранее конкретизировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:57 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat При чем тут демагогия. Наследование это заявка объекта "Я есть что-то", а реализация или "типа как наследование" контракта-интерфейса это "Я умею то-то". Read-write коллекция умеет все что умеет read-only коллекция, но при этом ей не является , т.к. может изменяться. Ты путаешь экземпляр и интерфейс. Интерфейс не позволяет менять коллекцию, но он говорит явно -- я коллекция. Соответственно по самому контракту, если ты отдаёшь коллекцию как интерфейс IReadOnly, значит ты её не должен менять. В идеале immutable, но в контексте .NET существующего бекграунда, IReadOnly коллекции -- разумный компромисс. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:58 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt но он говорит явно -- я коллекция. Он говорит только то, что он поддерживает определенные операции коллекции (те, которые коллекцию не меняют). hVostt В идеале immutable, но в контексте .NET существующего бекграунда В коре System.Collections.Immutable есть начиная чуть ли не с первой версии. Мало кто про него знает только. Все пишут сайты на ПХП под миллиард одновременных пользователей ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:10 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt значит ты её не должен менять. Я её и не смогу менять (потому что мне дали интерфейс только на read операции), но никто мне при этом не обещает что сам её менять не будет, если у него есть доступ к её полной реализации. DateTime мне тоже не дает Now самому менять, но это ведь совсем не означает, что оно само остается неизменным. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:13 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt но он говорит явно -- я коллекция. Он говорит только то, что он поддерживает определенные операции коллекции (те, которые коллекцию не меняют). Я не понимаю с чем ты споришь, если честно. Ситуация с изменением у IEnumerable абсолютно такая же, как IReadOnly коллекций. Только IEnumerable -- это не коллекция, а IReadOnlyCollection -- коллекция. И семантика разная. Если уж на то пошло, ты говорил, что "не против", как можно быть не против того, чего не понимаешь в принципе? Т.е. по-твоему, это лишний интерфейс? Есть IEnumerable? Я если честно запутался. Моё мнение такое, ты бездумно везде пихал IEnumerable в том числе в DTO-шки, и сейчас пытаешь опрадать себя, иных вариантов я не вижу твоей позиции ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:46 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat DateTime мне тоже не дает Now самому менять, но это ведь совсем не означает, что оно само остается неизменным. Now это вообще функция, а не поле с данными. Хороший пример, кстати, ибо IEnumerable по сути тоже есть функция (GetEnumerator), а не данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:48 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat В коре System.Collections.Immutable есть начиная чуть ли не с первой версии. Мало кто про него знает только. Все пишут сайты на ПХП под миллиард одновременных пользователей С какой ещё первой версии? В каком-то 2012 году они появились. А .NET в 2002-м:) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:55 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt ты бездумно везде пихал IEnumerable в том числе в DTO-шки Ужаснешься - еще и других заставлял Но не бездумно, а вполне осмысленно - незачем использовать более конкретную абстракцию (а еще хуже её конкретную реализацию) там, где можно использовать более абстрактную. Если ты так делаешь, то ты создаешь потенциальные анальные ограничения и себе и другим. Потому что там где ты используешь абстракцию более высокого уровня ты всегда сможешь использовать абстракцию более низкого уровня (Liskov Substitution Principle), но не наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:57 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt С какой ещё первой версии? fkthat В коре ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:59 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Now это вообще функция, а не поле с данными. Ты, возможно, удивишься, но любое свойство Foo это вообще функция get_Foo() ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 17:02 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat, Дык не в коре они появились, ещё раньше в BCL. Не совсем ясна привязка к коре :) fkthat Ужаснешься - еще и других заставлял Но не бездумно, а вполне осмысленно - незачем использовать более конкретную абстракцию (а еще хуже её конкретную реализацию) там, где можно использовать более абстрактную. Сорян, но аргументы максимально нелепые. Пока что выглядит как бездумно, осмысленностью тут не пахнет. Если хочется супер-абстракции, ты гораздо больше получишь, если будешь использовать object и динамик. fkthat Если ты так делаешь, то ты создаешь потенциальные анальные ограничения и себе и другим. Это какие? Контракт это как раз про ограничения. Если тебе они претят, тебе надо с C# уходить в JS там или VB. Там нет ограничений. fkthat Потому что там где ты используешь абстракцию более высокого уровня ты всегда сможешь использовать абстракцию более низкого уровня (Liskov Substitution Principle), но не наоборот. IReadOnlyCollection наследует IEnumerable, так что не выдумывай. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 17:46 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt Now это вообще функция, а не поле с данными. Ты, возможно, удивишься, но любое свойство Foo это вообще функция get_Foo() Ну что тут сказать. Уел так уел.. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 17:47 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt ты гораздо больше получишь, если будешь использовать object и динамик. hVostt тебе надо с C# уходить в JS там или VB. Там нет ограничений. hVostt IReadOnlyCollection наследует IEnumerable, так что не выдумывай. Но не наоборот. Поэтому IEnumerable более абстрактен (выше уровень абстракции) чем IReadOnlyCollection. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:10 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Но не наоборот. Поэтому IEnumerable более абстрактен (выше уровень абстракции) чем IReadOnlyCollection. Object ещё более абстрактен, чем IEnumerable. fkthat hVostt ты гораздо больше получишь, если будешь использовать object и динамик. Ты либо трусы одень, либо крестик сними. Используй везде Object -- у него максимальная абстракция. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:13 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat Код: c# 1.
Этот пример, где IEnumerable выглядит как уместный. AddOne может вернуть ленивое вычисление. Я как бы нигде не утверждал, что IEnumerable плохой. Плохо его применять везде абсолютно. Как пример: DTO, там он не уместен. А ты защищаешь свой IEnumerable, как будто он тебе брат родной ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:17 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt у него максимальная абстракция. У него максимальная абстракция, но она не подходит для задач того же ДТО. А IEmumerable подходит. И IReadOnlyCollection подходит, но она менее максимальная, чем IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:31 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Как пример: DTO, там он не уместен. Ну чем он не уместен, если он содержит все нужное для ДТО (т.е. просто пройтись, причем еще всего лишь один раз, по элементам коллекции)? Если оговорено, что это должен быть DTO, который можно, допустим, кешировать, крутить на болте и заколачивать им гвозди, то IEnumerable тут уже действительно не подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:39 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt у него максимальная абстракция. У него максимальная абстракция, но она не подходит для задач того же ДТО. А IEmumerable подходит. И IReadOnlyCollection подходит, но она менее максимальная, чем IEnumerable. Весь смысл как раз здесь: "но она менее максимальная, чем IEnumerable" -- именно, чёрт подери! Когда тебе точно нужна коллекция по семантике и контексту, и ты должен быть уверен, что можешь сохранить её для многократного использования, ты не должен применять IEnumerable. Самый яркий признак джуна-быдлокодера, что он этого не понимает и везде пихает IEnumerable. Но когда тебе нужен результат для однократного прохода, или ты принимаешь что угодно, любую последовательность для обработки -- сам бог велел использовать IEnumerable. Или ты возвращаешь ленивое вычисление. fkthat Ну чем он не уместен, если он содержит все нужное для ДТО (т.е. просто пройтись, причем еще всего лишь один раз, по элементам коллекции)? Если оговорено, что это должен быть DTO, который можно, допустим, кешировать, крутить на болте и заколачивать им гвозди, то IEnumerable тут уже действительно не подойдет. Потому что DTO это транспортный объект, это полностью материализованные данные в памяти. Без всяких ленивых вычислений. Оно уже исходя из семантики оговорено , на любом уровне ты должен иметь возможность читать многократно DTO и хранить в памяти. Поэтому для DTO IEnumerable не подходит. По этой причине. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 06:02 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Но когда тебе нужен результат для однократного прохода В каком хрустальном шаре чувак, который сегодня пишет интерфейс и его реализацию должен угадать, для чего мне его результат будет нужен через неделю? hVostt это полностью материализованные данные в памяти. Я давал тут ссылку - ничего про какую-то обязательную материализованность и хранение в памяти там нет. hVostt на любом уровне ты должен иметь возможность читать многократно DTO и хранить в памяти. А почему бы еще не возможность сохранения на диск, отправки по емейл и распечатки на принтер - вот, мне так хочется, например, у меня задачи такие, что мне надо ДТО емейлом рассылать и на принтер печатать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 11:52 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat В каком хрустальном шаре чувак, который сегодня пишет интерфейс и его реализацию должен угадать, для чего мне его результат будет нужен через неделю? Как я говорил, если тебе нужен супер уровень абстракции, используй Object. Откуда ты знаешь, сегодня нужен IEnumerable, а завтра тебе вообще объект своего класса там понадобится, а послезавтра строка или число. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 15:42 |
|
async await в c#
|
|||
---|---|---|---|
#18+
так и знал, срач ниочом ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 20:13 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt - чувак, у тебя странный код, что в DTO может быть что-то такое, как ты говорил про IEnumerable а если нет - то и суда нет . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 20:16 |
|
async await в c#
|
|||
---|---|---|---|
#18+
короче так и не увидел ничего реально значимого. какая-то религия ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 20:24 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt Откуда ты знаешь, сегодня нужен IEnumerable, а завтра тебе вообще объект своего класса там понадобится Нет. Сегодня мне нужно то, что я могу перебрать элемент за элементом, и это именно IEnumerable. А, если мне завтра что-то понадобится, то я уже на стороне вызова заверну или превращу этот IEnumerable именно в то, что мне в данном случае нужно, и не буду вперед заморачиваться, что послезавтра понадобится, тем более не мне, а Васе или Пете. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 20:29 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt Откуда ты знаешь, сегодня нужен IEnumerable, а завтра тебе вообще объект своего класса там понадобится Нет. Сегодня мне нужно то, что я могу перебрать элемент за элементом, и это именно IEnumerable. А, если мне завтра что-то понадобится, то я уже на стороне вызова заверну или превращу этот IEnumerable именно в то, что мне в данном случае нужно, и не буду вперед заморачиваться, что послезавтра понадобится, тем более не мне, а Васе или Пете. Ну и в чём противоречие? Я вроде об этом и говорил, когда тебе нужна максимальная обобщённая последовательность, и тебе не важно, коллекция это, генератор, или отложенный запрос в БД -- берёшь IEnumerable. Когда у тебя по семантике это коллекция, то использовать IEnumerable не очень хорошо, для этого есть более специфичные интерфейсы, но при этом достаточно свободные для любых манёвров. В чём проблема-то? Контраргументы дикие какие-то, непонятно к чему ты их приплетаешь. Дескать если там когда-то в будущем бла-бла, что за хрень это вообще? Однозначно к такому посылу, один ответ -- бери object -- он максимально общий и максимально абстрактный. И всё ещё не понимаю, чем тебе object-то не нравится. Это же супер-абстракция, на любые случаи в жизни, о которых ты не узнаешь в хрустальном шаре ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 23:10 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat А, если мне завтра что-то понадобится, то я уже на стороне вызова заверну или превращу этот IEnumerable именно в то, что мне в данном случае нужно, и не буду вперед заморачиваться, что послезавтра понадобится, тем более не мне, а Васе или Пете. Короче хз, это демагогия, а не аргументы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 23:11 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt один ответ -- бери object Ему говорят, что бухать плохо, а он в ответ "давайте тогда пить только воду". И после этого говорит о демагогии. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 23:29 |
|
async await в c#
|
|||
---|---|---|---|
#18+
fkthat hVostt один ответ -- бери object Ему говорят, что бухать плохо, а он в ответ "давайте тогда пить только воду". И после этого говорит о демагогии. Так это я говорю, что бухать (использовать всегда IEnumerable во всех случаях) плохо. Пей (используй IEnumerable) разумно, тогда это действительно уместно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 23:45 |
|
async await в c#
|
|||
---|---|---|---|
#18+
hVostt используй IEnumerable Я уже запутался - ты только что советовал использовать object. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 00:09 |
|
|
start [/forum/topic.php?all=1&fid=18&tid=1354595]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
97ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 504ms |
0 / 0 |