Khi biên dịch mã sử dụng hợp đồng mã, tôi có một lỗi rất lạ mà tôi không hiểu.Tại sao hợp đồng không đúng định dạng khi sử dụng mặc định (Loại)?
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == default(Guid));
}
không thành công với các lỗi sau:
Malformed contract. Found Invariant after assignment in method '<ProjectName>.ObjectInvariant'.
Nếu mã được sửa đổi như sau:
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(
this.isSubsidiary ||
this.parentCompanyId == Guid.Empty);
// Noticed the Guid.Empty instead of default(Guid)?
}
nó biên dịch tốt.
Có gì sai với default(Guid)
của tôi?
Theo như tôi biết: public static readonly Guid Empty; và mặc định (Hướng dẫn) hoặc Hướng dẫn mới() giống nhau Tôi không biết tại sao nó không hoạt động ở đây. – abhishek
Tôi cũng gặp phải điều này. Curiously mặc định (int) không có tác dụng tương tự. –
@Can Gencer: Tôi nghĩ rằng điều này được mong đợi nếu bạn đọc câu trả lời của Porges. Đối với 'default (Guid)', IL tương ứng với 'Guid something = new Guid()', vì vậy có một lời gọi đến phương thức (constructor). Thay vào đó, 'default (int)' sẽ không tương ứng với 'int something = new int()', nó không có ý nghĩa gì cả. Đó là lý do tại sao trong trường hợp 'int', trình biên dịch không phàn nàn. –