Beim kompilieren Code, der Code-Verträge verwendet, habe ich einen sehr seltsamen Fehler, den ich nicht verstehe.Warum Vertrag ist falsch, wenn Sie Standard (Typ) verwenden?
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == default(Guid));
}
schlägt mit dem folgenden Fehler:
Malformed contract. Found Invariant after assignment in method '<ProjectName>.ObjectInvariant'.
Wenn der Code wie folgt geändert:
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == Guid.Empty);
// Noticed the Guid.Empty instead of default(Guid)?
}
es gut kompiliert.
Was ist los mit meinem default(Guid)
?
So weit ich weiß: public static readonly Guid Empty; und Standard (Guid) oder neue Guid() ist das gleiche Ich weiß nicht, warum es hier nicht funktioniert. – abhishek
Ich bin auch darauf gestoßen. Kurioserweise hat default (int) nicht den gleichen Effekt. –
@Can Gencer: Ich denke, das wird erwartet, wenn Sie die Antwort von Porges lesen. Für 'default (Guid) 'entspricht die IL' Guid something = new Guid() ', also gibt es einen Aufruf an eine Methode (Konstruktor). Stattdessen entspricht 'default (int)' nicht 'int etwas = new int()', es ergibt keinen Sinn. Deshalb beschwert sich der Compiler im Fall von "int" nicht. –