นี่คือเวอร์ชันของ @ JonSkeet สำหรับโลกของ C # 7.1 ที่อนุญาตให้ส่งผ่านค่าเริ่มต้นที่เป็นทางเลือกได้:
public static TV GetValueOrDefault<TK, TV>(this IDictionary<TK, TV> dict, TK key, TV defaultValue = default) => dict.TryGetValue(key, out TV value) ? value : defaultValue;
อาจมีประสิทธิภาพมากกว่าที่จะมีฟังก์ชันสองอย่างเพื่อเพิ่มประสิทธิภาพกรณีที่คุณต้องการส่งคืน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;
}
น่าเสียดายที่ C # ไม่มี (หรือยัง?) มีตัวดำเนินการลูกน้ำ (หรือตัวดำเนินการอัฒภาคที่เสนอ C # 6) ดังนั้นคุณต้องมีเนื้อความจริง (อ้าปากค้าง!) สำหรับหนึ่งในโอเวอร์โหลด