【发布时间】:2017-03-08 23:13:47
【问题描述】:
是否可以在 Dictionary 上创建一个扩展方法,如果 Dictionary 为 null 时能够自初始化?
我的想法大致如下:
public static void AddOrUpdate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
// Initialize the Dictionary if null
dictionary = dictionary ?? new Dictionary<TKey, TValue>();
// Update or insert value
dictionary[key] = value;
}
实际使用示例:
// null Dictionary
Dictionary<string, string> dict = null;
// Self-initializing
dict.AddOrUpdate("Key", "Value");
或作为属性:
// Self-initializing
class.nullDict.AddOrUpdate("Key", "Value");
【问题讨论】:
-
也许,但这打破了在空对象上调用方法的通常语义。通常应该抛出一个
NullReferenceException。 -
@Amy 你不应该自己扔 NRE。 Throw an ArgumentNullException 代替。
-
这不是我要说的,@CodeCaster。在空对象上调用方法应该会产生
NullReferenceException。这打破了这种语义。我不是建议他扔任何东西。我建议他不要这样做。 -
你的 if .. else... 块相当于 dictionary[key] = value
-
即使这是可能的,我也同意这违反了“正常”语义。如果你只是看你的例子,我不希望最终得到一本字典。我希望它充其量是一个错误或无操作。只需正常初始化它,就可以省去其他人弄清楚它的麻烦。如果您尝试延迟初始化,请使用
Lazy。
标签: c# .net dictionary extension-methods c#-6.0