【发布时间】:2010-11-30 13:05:47
【问题描述】:
好的,考虑一下我们大多数人都使用过很多次的常用习语(我假设):
class FooBarDictionary
{
private Dictionary<String, FooBar> fooBars;
...
FooBar GetOrCreate(String key)
{
FooBar fooBar;
if (!fooBars.TryGetValue(key, out fooBar))
{
fooBar = new FooBar();
fooBars.Add(key, fooBar);
}
return fooBar;
}
}
它有什么固定的名字吗?
(是的,它是用 C# 编写的,但它可以“轻松地”转移到 C++。因此有那个标签。)
【问题讨论】:
-
我总是这样称呼它:GetOrCreate。
-
做 C++,我似乎总是不得不使用
std::map<T>::find(),因为愚蠢的std::map<T>::operator[]()添加了缺失值,我只想找到那些已经存在的值。使用 C#,我似乎总是需要“获取或创建”并且必须编写以上内容,因为没有像漂亮的std::map<T>::operator[]()这样简单的操作可用。这不奇怪吗? -
@sbi:
std::map<T>::operator[]()不仅添加了缺失值,它还替换了已经存在的值。在某些情况下这很好,但不适用于GetOrCreate- 那么您必须使用std::map<T>::find()。 -
我在您的问题标题中读到“getOrCreate”并立即知道它的含义,所以这个名字不会那么糟糕。
标签: c# c++ design-patterns idioms