|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Что возвратит данный код? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:01 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
pation, Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:06 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
pation, 5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:41 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
5, т.к. сравнение не отработает. Сомнительная проверка на проф пригодность. Столкнулся с этим относительно недавно, раньше не знал об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 15:19 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:04 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Супер_Пав, 5? а тест запускали? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:47 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
buserСупер_Пав, 5? а тест запускали? после того,как вы спросили, запустил. 5. Как я и говорил, сравнение не вызывается, т.к. переопределено не правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:59 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
pationpation, Почему? Ну да правильный ответ ужо был - пуркуа что GetHashCode(). Не зря в учебниках о том пишут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 17:17 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Тот же решарпер в случае, когда из пары Equals/GetHashCode переопределен только один метод, подчеркивает переопределенный метод, и настойчиво рекомендует переопределить второй, что в общем-то правильно, хотя в данном случае не вполне очевидно - Distinct использует внутренний класс Set<T>, который для обнаружения аналогичного элемента активно использует поиск во внутренних структурах на основании хэшкода. Если нашлось - дальше вызывает IEqualityComparer<TSource> (если не задан, то дефолтный), если не нашлось - Equals объекта вообще не будет вызван, считается, что он уже уникален. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 17:32 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Что вернёт данный код? Код: javascript 1.
Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 18:18 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
skyANA, [1, 2, 3, 4, 5].map(x=>parseInt(x,4)) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 18:23 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныEquals объекта вообще не будет вызван, считается, что он уже уникален. ох, не конечно, equals всегда будет вызван ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 21:02 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
hVosttСон Веры ПавловныEquals объекта вообще не будет вызван, считается, что он уже уникален. ох, не конечно, equals всегда будет вызван Это легко проверяется установкой брейкпоинта в теле Equals. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 03:13 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 08:27 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
В случае Distinct, без переданного компарера, будет вызван Код: c# 1.
Который сравнит ссылки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 09:54 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВВ случае Distinct, без переданного компарера, будет вызван Код: c# 1.
Который сравнит ссылки. Он не сравнит ссылки, он вызовет obj1.Equals(obj2): https://referencesource.microsoft.com/#mscorlib/system/collections/generic/equalitycomparer.cs,250 (сравение ссылок - это ReferenceEquals). Если Equals переопределен, то, разумеется, вызовется переопределенный метод. Но до этого не доходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 09:58 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Кстати, если так Код: c# 1.
То результат 2. Ешо одын отличий клас от структур! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 09:59 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВКстати, если так Код: c# 1.
То результат 2. Ешо одын отличий клас от структур! Ну, у структур хэшкод вычисляется совсем не так, как у классов, это вроде бы известный факт. Особенно если у структуры нет ссылочных полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 10:02 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВКстати, если так Код: c# 1.
То результат 2. Ешо одын отличий клас от структур! Нет, то же будет 5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 11:41 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныТот же решарпер в случае, когда из пары Equals/GetHashCode переопределен только один метод, подчеркивает переопределенный метод, и настойчиво рекомендует переопределить второй, что в общем-то правильно, хотя в данном случае не вполне очевидно - Distinct использует внутренний класс Set<T>, который для обнаружения аналогичного элемента активно использует поиск во внутренних структурах на основании хэшкода. Если нашлось - дальше вызывает IEqualityComparer<TSource> (если не задан, то дефолтный), если не нашлось - Equals объекта вообще не будет вызван, считается, что он уже уникален. Решарпер для GetHashCode формирует очень сомнительный код, который в большинстве случаев работает неправильно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 11:42 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
pationРешарпер для GetHashCode формирует очень сомнительный код, который в большинстве случаев работает неправильно Ээмм.. ну да, обычно он его формирует как Код: c# 1. 2. 3. 4.
Я всегда считал, что это просто болванка, в которую нужно вписывать свой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 11:52 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, вообще-то я говорил о том, что он предлагает что вроде такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 11:58 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
pationСон Веры Павловны, вообще-то я говорил о том, что он предлагает что вроде такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Мой решарпер ни разу мне такого не предлагал. Более того, обычно вычисление хэшкода на основе неиммутабельных полей чревато очень серьёзными граблями, так что я как-то вообще удивлён. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 12:34 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныЕсли Equals переопределен, то, разумеется, вызовется переопределенный метод. Но до этого не доходит. Да, хеш будет вычислен от ссылки. Но опять таки, by design. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 12:48 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
hVosttСон Веры ПавловныЕсли Equals переопределен, то, разумеется, вызовется переопределенный метод. Но до этого не доходит. Да, хеш будет вычислен от ссылки. Но опять таки, by design. А вот фик там :) Ссылка может поменяться после сборки мусора, но у одного и того объекта, на протяжении жизни хеш должен быть постоянным. Видимо ради экономии места, для вычисления хеша, используется тоже самое поле, что и для lock. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 13:47 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
pationЕвгенийВКстати, если так Код: c# 1.
То результат 2. Ешо одын отличий клас от структур! Нет, то же будет 5 А ты спытай! Структура унаследована от ValueType, у последнего переопределены оба метода, они и будут вызваны. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 13:49 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВ, базовые методы у стукрутуры GetHashCode и Equals ппц какие тормозные, по этому их лучше сразу переопределить, если будите их использовать в большом количестве. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 14:50 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Roman Mejtes, Если нет полей, ссылочных типов, то довольно шустро. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 15:00 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
А что будет тут? И почему. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 15:21 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВpationпропущено... Нет, то же будет 5 А ты спытай! Структура унаследована от ValueType, у последнего переопределены оба метода, они и будут вызваны. сорь, неподумавши ляпнул ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 15:40 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttпропущено... Да, хеш будет вычислен от ссылки. Но опять таки, by design. А вот фик там :) Ссылка может поменяться после сборки мусора, но у одного и того объекта, на протяжении жизни хеш должен быть постоянным. Видимо ради экономии места, для вычисления хеша, используется тоже самое поле, что и для lock. Вот тут товарищ пишет (прилагая пруфлинки) что для ссылочных типов используется некий уникальный для каждого потока генератор хешей. Ну, и сохраняет его в SyncBlock'е. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 16:01 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Так правильно. Код: 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.07.2019, 16:12 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Насколько я помню из книги Рихтера, еще за 2007 год, для того чтобы метод Equals заработал, надо обязательно переопределить метод GetHashCode. Всегда парами их надо переопределять. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 17:18 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Захотел проверить, но что-то даже не компилируется Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 17:28 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Вот так будет то же самое: Код: 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.
Cat2Захотел проверить, но что-то даже не компилируется Всегда следует исходить из того, что публикуемый код написан на последней существующей (даже не поддерживаемой) версии языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 18:26 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВот так будет то же самое: А вот так - совсем не то же самое: Код: 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.
и так тоже: Код: 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.
Т.о. если полей нет, то вычислитель хэшкода на содержимое занимаемой памяти не смотрит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 18:36 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
ЕвгенийВВидимо ради экономии места, для вычисления хеша, используется тоже самое поле, что и для lock. Да хеш будет лежать вместо индекса контекста синхронизации :) Я ж не имел в виду от значения ссылки ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 21:26 |
|
Задача на проф. пригодность
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныТ.о. если полей нет, то вычислитель хэшкода на содержимое занимаемой памяти не смотрит. Судя по исходникам ValueType и coreclr , получается такая картина: 1. Эта структура, как ни странно, не может использовать быстрые варианты вычисления хэшкода и эквивалентности: если вытащить рефлекшеном значение метода CanCompareBits , то он вернет false. Видимо, структура является неплотно упакованной, потому как другие причины такого значения (переопределенные GetHashCode и/или Equals, наличие полей ссылочного типа - полей нет вообще никаких) отпадают (вот нативный код реализации CanCompareBits ). 2. Из-за п.1 мы получаем сравнение в цикле полей, и вычисление хэшкода на основе полей. Но т.к. полей нет, то в цикл мы не входим, и из метода Equals выходим с значением true . И т.к. полей нет, то вычислитель хэшкода возвращает значение, установленное до цикла вычисления хэшкода - некий TypeId, полученный от MethodTable типа, и обработанный вот таким образом : Код: c# 1.
- т.е. всегда одинаковый для всех экземпляров структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 07:31 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1398860]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 255ms |
0 / 0 |