Dav*_*ave 5 c# dictionary stl map
去年我第一次开始使用C#进行编程时,我立即寻找了与STL相同的地图,并学习了Dictionary.
更新了下面的垃圾,我完全错了.我与STL的地图的经验是,我讨厌当我要求它的价值,如果关键在地图上没有,它会自动创建值类型(无论其默认构造函数所做的那样),并将其添加到地图中.然后我必须在代码中检查这个条件并抛出异常.
字典<>使整个shebang正确 - 如果键不存在,它会在您请求值时抛出异常,或者如果不是,则自动添加它并且您想要设置该值.
但你们都已经知道了.我应该在发布之前编写我的单元测试并让自己感到尴尬.:)他们现在写的!
现在我喜欢Dictionary和all,但是现在最让我烦恼的是,如果键不在Dictionary中,它会抛出KeyNotFoundException.因此,我总是需要编写如下代码:
Dictionary<string,string> _mydic;
public string this[string key]
{
get {
return _mydic[key]; // could throw KeyNotFoundException
}
set {
if( _mydic.ContainsKey( key))
_mydic[key] = value;
else
_mydic.Add( key, value);
}
}
Run Code Online (Sandbox Code Playgroud)
如果键不存在,为什么Dictionary不会自动添加键值对,如STL的映射?
现在有趣的是,在以前的生活中,我常常生气,因为我经常不得不试图阻止地图这样做.我想我现在的用例有点不同.
Jon*_*eet 10
如果地图中不存在,您希望它返回哪个值?它可以返回default(TValue)- 但是假设它是正确的,那么意外地使用一个值会有点容易.请注意,如果您需要该行为,可以使用:
get {
string value;
if (!_mydic.TryGetValue(key, out value))
value = default(string);
return value;
}
Run Code Online (Sandbox Code Playgroud)
我不会亲自推荐它,但是如果你很高兴不能区分(通过这个索引器)一个具有空值和缺失键的键,那么它就可以解决问题.
请注意,你的二传手可以让我更简单 - 只是
_mydic[key] = value;
Run Code Online (Sandbox Code Playgroud)
必要时会覆盖.