使用字典时避免代码重复

本文关键字:代码 字典 | 更新日期: 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

这反过来又会降低代码中当前存在的未初始化变量的风险。