使用字典时避免代码重复
本文关键字:代码 字典 | 更新日期: 2023-09-27 18:07:50
我有以下代码片段:
short adults, teens, children;
dict.TryGetValue("ADT", out adults);
dict.TryGetValue("TEEN", out teens);
dict.TryGetValue("CHD", out children);
ServiceModel.Set(adults, teens, children);
其中dict是Dictionary类型的填充实例。
我坚信,这是可以重写的不可重复的方式。知道怎么做吗?提前谢谢大家
将代码替换为:
ServiceModel.Set(dict["ADT"], dict["TEEN"], dict["CHD"]);
No。没有办法让它更短了。无论你多么努力地"优化",你都必须访问字典三次。你为什么要这么做?这些行是输出值所必需的。
一个建议,虽然,因为你没有正确应用TryGetValue
。通常检查返回值是否为true
来表示成功。如果不成功,可以将该值设置为默认值。
如果条目必须在字典中,您可以简单地使用:
adults = dict["ADT"];
如果条目不是强制性的,你的代码应该包括分配一个默认值。
您可以编写一个扩展方法,在没有键时提供默认值:
public static class DictEx
{
public static TVal GetValueOrDefault<TKey, TVal>(
this IDictionary<TKey, TVal> dict, TKey key, TVal defaultValue = default(TVal))
{
TVal val;
return dict.TryGetValue(key, out val) ? val : defaultValue;
}
}
并与Dictionary<string,short>
dict.GetValueOrDefault("nonexistentKey") //returns default(short) (0)
dict.GetValueOrDefault("nonexistentKey", 1000) //returns 1000
dict.GetValueOrDefault("existingKey", 1000) //returns value, default is ignored
这反过来又会降低代码中当前存在的未初始化变量的风险。