Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > VS 2008 struct Bug |
Автор: Jlekc 21.7.2008, 13:02 | ||
Странный баг. В VS2005 в консуль этот код выдает разные значения. И это вроде нормально В VS2008 проект работал нормально, но на каком-то этапе начал глючить. Упростил код до ниже привиденного. Структура передалась по ссылки((. Мож кто натыкался, подскажите как это лечиться.
|
Автор: Jlekc 21.7.2008, 13:19 | ||
В продолжение глюков:
почему 1 и 2 вывод отличаеться, а 3 совпадает с 2?? |
Автор: HalkaR 21.7.2008, 13:20 |
Не совсем понимаю - в чем проблема? Да хэш всегда одинаковый и это правильно. Добавлено через 59 секунд В чем проблема то - поменял значение, поменялся и хэш. |
Автор: Jlekc 21.7.2008, 13:22 |
Хеш должен дать в данном случае адресс размешения? Проблема в том что структура передалась по ссылке, в методе были модификации ее полей. И значит оригинальная структура тоже изменилас. Я этого не ожидал, причем раньше все было нормально. |
Автор: Idsa 21.7.2008, 13:23 | ||
Jlekc, дело в том, что метод GetHashCode, который структура наследует у Object, возвращает Hash на основании полей. Т. к. у двух этих структур нет полей, то возвращаются одинаковые хэши. Вот немного модифицированный пример и первого поста:
Здесь хэши различаются на 1. Если изменить значения параметров, хэши изменятся. Добавлено @ 13:25 Потому что в первый раз Name равен пустой строке, а во 2-й и 3-й разы - "1". |
Автор: Jlekc 21.7.2008, 13:39 | ||
Ну ладно с хешем еще понятно. А почему такое поведение:
|
Автор: HalkaR 21.7.2008, 13:47 |
Потому что массив - это ссылочный тип. При передаче объекта Test в метод он (объект Test) копируется, но ссылка на массив остается таже. |
Автор: Jlekc 21.7.2008, 13:56 | ||
Я думал что слово копируеться означает и копирование полей. Для того чтоб не повредить оригинал заниматься ручным копирование полей? Но это криво. |
Автор: Idsa 21.7.2008, 13:58 |
Так оно и есть. Просто в этом поле хранится не массив, а ссылка на него. Она и копируется. |
Автор: HalkaR 21.7.2008, 13:58 | ||||
Такова жизнь ![]() |
Автор: Jlekc 21.7.2008, 14:01 |
![]() |