Tôi muốn kiểm tra nếu một id chưa được biết hoặc, nếu nó được biết, nếu giá trị liên quan đã thay đổi. Tôi hiện đang sử dụng mã tương tự như thế này, nhưng khó hiểu đối với những người không quen với mẫu. Bạn có thể nghĩ ra một cách để làm cho nó dễ đọc hơn trong khi vẫn giữ nó ngắn trong LOC?Tôi làm cách nào để làm cho mã từ điển TryGetValue này dễ đọc hơn?
string id;
string actual;
string stored;
if (!someDictionary.TryGetValue (id, out stored) || stored != actual) {
// id not known yet or associated value changed.
}
Nó không hoàn toàn giống với bất kỳ câu lệnh 2 điều kiện nào vì nó đòi hỏi phải khai báo trước tham số 'out'. "... quen với nó?" Nó không phải là devs là "nhầm lẫn", * mỗi se *. Ngay cả một lập trình viên kỳ cựu, người đọc từ trái sang phải phải trả lại, ra, và chỉ để đọc điều này, và sắp xếp một số yếu tố trong tâm trí trong khi làm như vậy. Đây không phải là một nhiệm vụ * cứng *, nhưng nó cũng không phải là tự nhiên. Đây là phần mã thủ tục và giới thiệu cơ hội cho sự lặp lại và lỗi. Khả năng đọc là một mối quan tâm chính đáng và 'TryGetValue' với kết quả' bool' là yếu về mặt ngữ nghĩa. – Jay
@Jay: Tại sao bạn kiểm tra việc khai báo biến số ngoài? Nó rõ ràng là có (hoặc trình biên dịch sẽ khiếu nại), và bạn không nên quan tâm những gì giá trị đã được trước (vì nó là một param ra, giá trị không được sử dụng bởi các chức năng). Điều này thực sự là tất cả về 'out' thay vì điều kiện? Về những điểm duy nhất tôi sẽ thừa nhận trên tuyên bố này là 1.) tác dụng phụ là trong điều kiện, và 2.) các điều kiện là phụ thuộc vào thứ tự. 'bool Try * (out)' là một thành ngữ được thiết lập tốt trong BCL mà tôi mong đợi devs to grok, vì vậy tôi tha thứ cho cái đầu tiên. –
@Jay: Nhận xét của bạn là "tại chỗ". Theo tôi, không ai trong số các câu trả lời địa chỉ có thể đọc được. Đó là lý do tại sao tôi đóng góp mã được đề xuất của tôi. – AMissico