标题主要是说。我想在C#中向基类Dictionary类添加一个简单的扩展方法。起初我将其命名为Pop(TKey键),有点像Stack方法,但它接受用于查找的键。
然后我要做Take(TKey键),但它与同名的LINQ方法一致......虽然C#3.0允许你这样做,但我不喜欢它。
那么,您如何看待,只要坚持使用Pop,或者是否有更好的术语来“查找和删除元素”?
(我觉得有点不好意思问这个问题,这似乎是一件小事......但我喜欢使用标准,而且我对很多语言/环境没有广泛的经验。)
编辑:对不起,本来应该解释一下....在这个例子中,我不能使用术语删除,因为它已经由我用新方法扩展的类定义。
编辑2:好的,这是我迄今为止所拥有的,受到人群智慧的启发:public static TValue Extract<TKey, TValue>
(
this Dictionary<TKey, TValue> dict,
TKey key
)
{
TValue value = dict[key];
dict.Remove(key);
return value;
}
public static bool TryExtract<TKey, TValue>
(
this Dictionary<TKey, TValue> dict,
TKey key,
out TValue value
)
{
if( !dict.TryGetValue(key, out value) )
{
return false;
}
dict.Remove(key);
return true;
}
答案 0 :(得分:8)
我认为提取,就像考古学家在地上找到木乃伊一样,将其移除然后返回它到博物馆:))
答案 1 :(得分:1)
Remove(key) method already provided?
特别错误 哦,等等,你想要还原的元素也被删除了吗?怎么样object valueRemoved = someDictionary.RemoveElement(key)
轻松实现
if (!dict.ContainsKey(key))
{
return null;
}
object val = dict[key];
dict.Remove(key);
return val;
答案 2 :(得分:1)
我的第一个猜测是“Take”,但正如你所指出的那样,已经采取了这种做法。我的下一个建议是“Extract”或“Detach”,但它们可能含糊不清。
“退出”或“拉出”怎么样?
答案 3 :(得分:1)
此操作略微让人联想到一个名为Linda的旧协作平台(主要是学术界)。在那种环境中,你所谈论的内容将被称为“in”。但这对它来说是一个可怕的名字 - 它们基本上都有名称向后,因为他们从共享元组空间的角度命名它们。所以,没关系。
Extract很好,“Pop”也很明显(几乎任何人都知道你在做什么,即使它不是一个堆栈)。