Nó xảy ra bởi vì các lớp thực hiện IDictionary<TKey, TValue>
; cảnh báo sẽ biến mất nếu bạn (tạm thời) xóa phần giao diện của chữ ký lớp.
Vì "khóa" trong lớp tiêu chuẩn System.Collections.Generic.Dictionary
không bao giờ có thể là null
(nó ném một số ArgumentNullException
), tôi muốn nói rằng ReSharper đang tạo giả định không chính xác.
Kiểm tra các hành vi:
Tôi đã thử nghiệm lớp học trong một dự án khác rỗng và cố gắng nó ra. Mặc dù ReSharper đã tô xám tất cả các mã, nhưng nó vẫn được thực thi khi chạy.
Văn bản màu xám cho biết ReSharper tin rằng logic sẽ luôn bỏ qua khối else
, nhưng rõ ràng không phải như vậy khi bạn sử dụng.
Một sửa chữa, sử dụng Chú thích:
Để khắc phục vấn đề ReSharper giả theo mặc định rằng chìa khóa không thể null
, bạn có thể sử dụng JetBrains Chú thích.
Thêm tham chiếu vào cụm Chú thích JetBrains. Đối với tôi, đây là vị trí:
C: \ Program Files (x86) \ JetBrains \ ReSharper \ v8.2 \ Bin \ JetBrains.Annotations.dll
Sau đó thêm một chỉ thị sử dụng để phía trên cùng của tập tin mà lớp là:
using JetBrains.Annotations;
Bây giờ đánh dấu rằng tham số với các thuộc tính CanBeNull
và bạn sẽ thấy ReSharper không còn màu xám ra văn bản:
public bool TryGetValue([CanBeNull] TKey key, out TValue value)
Nguồn
2014-12-20 14:13:06
Chuẩn 'Từ điển' ném một ArgumentNullException nếu khóa là rỗng, nhưng có vẻ như việc triển khai này cho phép' null'.Nó có một cái gì đó để làm với việc thực hiện giao diện 'IDictionary', nhưng tôi không chắc liệu ReSharper có đúng hay không, hoặc nếu nó đưa ra giả định không chính xác. –