Saya menguji beberapa layanan WCF yang mengirim objek dengan Guids bolak-balik. Dalam kode pengujian aplikasi web saya, saya melakukan hal berikut:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
Untuk beberapa alasan, panggilan ke Guid baru () menghasilkan Guids dengan semua 0 (nol) seperti ini:
00000000-0000-0000-0000-000000000000
Apa yang menyebabkan ini?
Guid.Empty
Jawaban:
Gunakan metode statis
Guid.NewGuid()
alih-alih memanggil konstruktor default.sumber
Pelajaran dari ini:
1) Guid adalah tipe nilai, bukan tipe referensi.
2) Memanggil konstruktor default
new S()
pada semua tipe nilai selalu memberi Anda kembali semua-nol bentuk tipe nilai itu, apa pun itu. Secara logis sama dengandefault(S)
.sumber
default(S)
atau apakah ada seluk-beluk saya hilang?const int x = new int();
tidak seharusnya legal menurut spesifikasi, tetapiconst int x = default(int);
; kami mengizinkan keduanya.Coba ini sebagai gantinya:
Ini akan menghasilkan nilai Panduan 'nyata'. Ketika Anda baru tipe referensi, itu akan memberi Anda nilai default (yang dalam hal ini, semua nol untuk Guid).
Saat Anda membuat Guid baru, itu akan menginisialisasi ke semua nol, yang merupakan nilai default untuk Guid. Ini pada dasarnya sama dengan membuat int "baru" (yang merupakan tipe nilai tetapi Anda dapat melakukannya):
Bandingkan ini dengan melakukan hal yang sama dengan int:
sumber
g1
hanya akan dikompilasi sebagai bidang dan bukan sebagai variabel lokal. Juga indeks di kolom komentar Anda tidak cocok dengan baris kode yang samaCoba lakukan:
sumber
Tidak dapat memberi tahu Anda berapa kali ini tertangkap. saya.
sumber
Dengan semangat lengkap, jawaban yang menginstruksikan Anda untuk digunakan
Guid.NewGuid()
adalah benar.Dalam menangani pengeditan berikutnya, Anda harus memposting kode untuk
RequestObject
kelas Anda . Saya curiga bahwa properti pemandu Anda tidak ditandai sebagaiDataMember
, dan karenanya tidak disambungkan melalui kawat. Karenadefault(Guid)
sama dengannew Guid()
(yaitu semuanya0
), ini akan menjelaskan perilaku yang Anda lihat.sumber