Kod sözleşmelerini kullanan kodları derlerken, anlayamadığım çok tuhaf bir hatam var.Varsayılan (Tip) kullanıldığında neden sözleşme yanlış biçimlendiriliyor?
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == default(Guid));
}
aşağıdaki hata nedeniyle başarısız: kodu şöyle değiştirilir
Malformed contract. Found Invariant after assignment in method '<ProjectName>.ObjectInvariant'.
ise:
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == Guid.Empty);
// Noticed the Guid.Empty instead of default(Guid)?
}
iyi derler.
default(Guid)
benim sorunum nedir?
Bildiğim kadarıyla: public static readonly Guid Empty; ve varsayılan (Guid) veya yeni Guid() aynı şey Burada neden çalışmıyor bilmiyorum. – abhishek
Ben de buna rastladım. Merakla varsayılan (int) aynı etkiye sahip değildir. –
@Can Gencer: Bence Porges'in cevabını okursanız bu beklenir. Varsayılan (Guid) 'için, IL, Guid = Guid()' e karşılık gelir, böylece bir yönteme (yapıcı) bir çağrı vardır. Bunun yerine, 'default (int)' 'int şey = new int()' ile uyuşmayacak, anlam ifade etmiyor. Bu yüzden 'int' durumunda derleyici şikâyetçi değildir. –