9
編譯使用代碼合同的代碼時,我有一個很奇怪的錯誤,我不明白。爲什麼使用默認(類型)時合同格式錯誤?
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == default(Guid));
}
失敗,出現以下錯誤:
Malformed contract. Found Invariant after assignment in method '<ProjectName>.ObjectInvariant'.
如果代碼被修改如下:
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == Guid.Empty);
// Noticed the Guid.Empty instead of default(Guid)?
}
它編譯良好。我的default(Guid)
有什麼問題?
據我所知:public static readonly Guid Empty;和默認(Guid)或新的Guid()是相同的東西 我不知道它爲什麼不在這裏運作。 – abhishek 2010-08-29 23:38:26
我也遇到過。奇怪的是默認(int)不具有相同的效果。 – 2011-07-22 10:06:29
@Can Gencer:我認爲這是預期的,如果你讀Porges的答案。對於'default(Guid)',IL對應於'Guid something = new Guid()',所以有一個對方法(構造函數)的調用。相反,'default(int)'不會對應'int something = new int()',這是沒有意義的。這就是爲什麼'int'的情況,編譯器不會抱怨。 – 2011-07-22 10:23:10