OK, tôi có thêm một câu hỏi về Hợp đồng mã khác. Tôi có một hợp đồng trên một phương pháp giao diện trông giống như thế này (phương pháp khác bỏ qua cho rõ ràng):Sử dụng hợp đồng .ForAll trong các hợp đồng mã số
[ContractClassFor(typeof(IUnboundTagGroup))]
public abstract class ContractForIUnboundTagGroup : IUnboundTagGroup
{
public IUnboundTagGroup[] GetAllGroups()
{
Contract.Ensures(Contract.Result<IUnboundTagGroup[]>() != null);
Contract.Ensures(Contract.ForAll(Contract.Result<IUnboundTagGroup[]>(), g => g != null));
return null;
}
}
tôi có mã tốn nhiều giao diện trông như thế này:
public void AddRequested(IUnboundTagGroup group)
{
foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
{
AddRequested(subGroup);
}
//Other stuff omitted
}
AddRequested
đòi hỏi một phi null tham số đầu vào (nó thực hiện một giao diện trong đó có một hợp đồng Yêu cầu) và vì vậy tôi nhận được một lỗi 'yêu cầu chưa được chứng minh: nhóm! = null' trên nhóm con được chuyển vào AddRequested
. Tôi có sử dụng cú pháp ForAll chính xác không? Nếu vậy và người giải quyết đơn giản là không hiểu, có cách nào khác để giúp người giải quyết nhận ra hợp đồng hay tôi chỉ đơn giản là cần sử dụng một Giả sử bất cứ khi nào GetAllGroups() được gọi?
Phiên bản mới nhất đã bật 'ForAll', bạn có thể thử dùng thử :) – porges