![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Jlekc |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 520 Регистрация: 10.2.2005 Где: Leopolis Репутация: 1 Всего: 4 |
Странный баг. В VS2005 в консуль этот код выдает разные значения. И это вроде нормально
В VS2008 проект работал нормально, но на каком-то этапе начал глючить. Упростил код до ниже привиденного. Структура передалась по ссылки((. Мож кто натыкался, подскажите как это лечиться.
-------------------- |
|||
|
||||
Jlekc |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 520 Регистрация: 10.2.2005 Где: Leopolis Репутация: 1 Всего: 4 |
В продолжение глюков:
почему 1 и 2 вывод отличаеться, а 3 совпадает с 2?? Это сообщение отредактировал(а) Jlekc - 21.7.2008, 13:20 -------------------- |
|||
|
||||
HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
Не совсем понимаю - в чем проблема? Да хэш всегда одинаковый и это правильно.
Добавлено через 59 секунд В чем проблема то - поменял значение, поменялся и хэш. |
|||
|
||||
Jlekc |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 520 Регистрация: 10.2.2005 Где: Leopolis Репутация: 1 Всего: 4 |
Хеш должен дать в данном случае адресс размешения?
Проблема в том что структура передалась по ссылке, в методе были модификации ее полей. И значит оригинальная структура тоже изменилас. Я этого не ожидал, причем раньше все было нормально. -------------------- |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Jlekc, дело в том, что метод GetHashCode, который структура наследует у Object, возвращает Hash на основании полей. Т. к. у двух этих структур нет полей, то возвращаются одинаковые хэши.
Вот немного модифицированный пример и первого поста:
Здесь хэши различаются на 1. Если изменить значения параметров, хэши изменятся. Добавлено @ 13:25 Потому что в первый раз Name равен пустой строке, а во 2-й и 3-й разы - "1". Это сообщение отредактировал(а) Idsa - 21.7.2008, 13:26 |
|||
|
||||
HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
Хэш ни в каком случае не возвращает адрес размещения. Первое, это небезопасно, второе - бесполезно. Хэш даже в простейшем случае генерируется на основе данных в объекте.
Ты ошибаешься, в данном примере структура передавалась по значению. |
|||
|
||||
Jlekc |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 520 Регистрация: 10.2.2005 Где: Leopolis Репутация: 1 Всего: 4 |
Ну ладно с хешем еще понятно.
А почему такое поведение:
-------------------- |
|||
|
||||
HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
Потому что массив - это ссылочный тип. При передаче объекта Test в метод он (объект Test) копируется, но ссылка на массив остается таже.
Это сообщение отредактировал(а) HalkaR - 21.7.2008, 13:51 |
|||
|
||||
Jlekc |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 520 Регистрация: 10.2.2005 Где: Leopolis Репутация: 1 Всего: 4 |
Я думал что слово копируеться означает и копирование полей. Для того чтоб не повредить оригинал заниматься ручным копирование полей? Но это криво. -------------------- |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Так оно и есть. Просто в этом поле хранится не массив, а ссылка на него. Она и копируется. |
|||
|
||||
HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
||||
|
||||
Jlekc |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 520 Регистрация: 10.2.2005 Где: Leopolis Репутация: 1 Всего: 4 |
-------------------- |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |