为什么字典在使用无效的键索引集合时不会返回
null
呢?由于通用字典可以包含值类型的实例,而对于值类型来说null是无效的。例如:
var dict = new Dictionary<string, DateTime>();
DateTime date = dict["foo"]; // What should happen here? date cannot be null!
你应该使用字典的TryGetValue方法:var dict = new Dictionary<string, DateTime>();
DateTime date;
if (dict.TryGetValue("foo", out date)) {
// Key was present; date is set to the value in the dictionary.
} else {
// Key was not present; date is set to its default value.
}
此外,一个存储引用类型的字典仍会存储 null 值。而且你的代码可能会认为 "value is null" 与 "key does not exist" 是不同的。
微软决定这样做 =)
进行内联检查以避免这种情况发生。
object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null;
实际原因:因为字典可以存储null值。在您的情况下,您无法通过异常区分这种情况。
default(DateTime)
而不是null。 - Extragoreydefault(DateTime)
,那么您无法区分“值为default(DateTime)
”和“键不存在”,至少需要额外调用ContainsKey()
(这将不必要地使操作成本翻倍)。对于包含引用类型作为值的字典,也许null
是一个有意义的状态,而不是“键不存在”。 - cdhowie