Đây là phiên bản của @ JonSkeet dành cho thế giới C # 7.1, cũng cho phép một mặc định tùy chọn được truyền vào:
public static TV GetValueOrDefault<TK, TV>(this IDictionary<TK, TV> dict, TK key, TV defaultValue = default) => dict.TryGetValue(key, out TV value) ? value : defaultValue;
Có thể hiệu quả hơn khi có hai chức năng để tối ưu hóa trường hợp bạn muốn trả về default(TV)
:
public static TV GetValueOrDefault<TK, TV>(this IDictionary<TK, TV> dict, TK key, TV defaultValue) => dict.TryGetValue(key, out TV value) ? value : defaultValue;
public static TV GetValueOrDefault2<TK, TV>(this IDictionary<TK, TV> dict, TK key) {
dict.TryGetValue(key, out TV value);
return value;
}
Thật không may, C # không (chưa?) Có toán tử dấu phẩy (hoặc toán tử dấu chấm phẩy được đề xuất C # 6), do đó bạn phải có một cơ thể chức năng thực sự (thở hổn hển!) Cho một trong những tình trạng quá tải.