Guid-это все 0 (нули)?
Я тестирую некоторые службы WCF, которые отправляют объекты с идентификаторами GUID туда и обратно. В моем тестовом коде веб-приложения я делаю следующее:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
почему-то звонок на новый Guid () генерирует GUID со всеми 0 (нулями), как это:
00000000-0000-0000-0000-000000000000
что может быть причиной этого?
6 ответов:
используйте статический метод
Guid.NewGuid()вместо вызова конструктора по умолчанию.var responseObject = proxy.CallService(new RequestObject { Data = "misc. data", Guid = Guid.NewGuid() });
извлечь уроки из этого:
1) Guid-это тип значения, а не ссылочный тип.
2) вызов конструктора по умолчанию
new S()на любом типе значения всегда возвращает вам все-нулевую форму этого типа значения, что бы это ни было. Это логически то же самое, чтоdefault(S).
попробуйте это вместо этого:
Guid = Guid.NewGuid();это создаст "реальное" значение Guid. Когда вы создаете ссылочный тип, он даст вам значение по умолчанию (которое в этом случае является всеми нулями для Guid).
при создании нового Guid он инициализирует его для всех нулей, что является значением по умолчанию для Guid. Это в основном то же самое, что создать "новый" int (который является типом значения, но вы можете сделать это в любом случае):
Guid g1; // g1 is 00000000-0000-0000-0000-000000000000 Guid g2 = new Guid(); // g2 is 00000000-0000-0000-0000-000000000000 Guid g3 = default(Guid); // g3 is 00000000-0000-0000-0000-000000000000 Guid g4 = Guid.NewGuid(); // g4 is not all zeroesсравните это с тем же самым с инт:
int i1; // i1 is 0 int i2 = new int(); // i2 is 0 int i3 = default(int); // i3 is 0
в духе полноты, ответы, которые инструктируют вас использовать
Guid.NewGuid()правильные.при обращении к вашему последующему редактированию вам нужно будет опубликовать код для вашего
RequestObjectкласса. Я подозреваю, что ваше свойство guid не помечено какDataMember, и таким образом не сериализуется по проводу. Так какdefault(Guid)это то же самое, чтоnew Guid()(т. е.0' s), это объяснило бы поведение, которое вы видите.
Comments