Tôi có một đoạn mã mà trông một chút như thế này:CC Đề xuất Redundant Đảm bảo
public TReturn SubRegion(TParam foo)
{
Contract.Requires(foo!= null);
Contract.Ensures(Contract.Result<TReturn>() != null);
if (!CheckStuff(foo))
foo.Blah();
return OtherStuff(foo);
}
CC là đem lại cho tôi một lời cảnh báo:
Cảnh báo 301 CodeContracts: Hãy xem xét thêm các hợp đồng hậu. Đảm bảo (Contract.Result()! = Null); để cung cấp tài liệu bổ sung cho khách hàng thư viện
Rõ ràng là hoàn toàn dư thừa! Tôi có một số cảnh báo dư thừa như vậy và nó trở thành một vấn đề (cảnh báo thực sự bị chôn vùi trong một loạt các đề xuất dư thừa).
Vì vậy, tôi có hai câu hỏi:
1) Tôi có thiếu điều gì đó có nghĩa đây không phải là đề xuất dự phòng không? Trong trường hợp nào tôi cần phải làm gì để khắc phục cảnh báo này?
2) Ngoài ra, nếu điều này chỉ là một quirk của CCCheck và không thể được cố định làm thế nào tôi có thể ẩn hoặc ngăn chặn cảnh báo này?
N.b. Chỉ trong trường hợp bạn cho rằng ví dụ của tôi thiếu một cái gì đó quan trọng, mã đầy đủ là phương thức SubRegionhere.
Bạn đang sử dụng phiên bản mã nào? –
Nhìn vào mã của bạn, tôi nghĩ rằng vấn đề là tiếp tục xuống dòng. Trong 'SubRegion' có một cuộc gọi đến' ConstructFromSlicePart', mà lần lượt có một cuộc gọi đến 'Construct (hình dạng IReadOnlyList)'. Bên trong 'Construct' dòng cuối cùng là' return default (TSection) '. Nếu 'TSection' là một kiểu tham chiếu, thì phương thức sẽ trả về null. Đây có thể là nguyên nhân, mà cuối cùng là biểu hiện chính nó như là cảnh báo này. –
Phiên bản CC là 1.9.10714.2 - theo như tôi có thể thấy đó là mới nhất. re: phương pháp xây dựng, bạn có chắc là bạn không nhìn vào lớp hợp đồng? Việc triển khai thực sự duy nhất của Construct là: https://bitbucket.org/martindevans/base-citygeneration/src/0128578a6228487ac3d98398bf0c8ed8bb43d0f5/Base-CityGeneration/Elements/Building/Internals/Floors/Design/Region.cs?at=default&fileviewer=file -view-default # Region.cs-34 rõ ràng không bao giờ trả về null! – Martin