Why do C# TryAdd, TryRemove, TryGetValue return null sets when they fail?
字典方法失败时为什么返回空集?
If the answer is"what do you expect them to return???" I guess I was
expecting an empty HashSet that I can run methods like Count or
GetEnumerator on. Without getting an exception.Maybe my question is really, should I catch an exception, make the return value not null and then return it?
号
我看过这个问题,但是当我调用add()、remove()或TryGetValue()时,我的字典不是空的。
是的,这是一个编程分配,但数据结构是我的选择,用两个并发的操作来表示一个图。
测试运行时:
1 2 | DependencyGraph t = new DependencyGraph(); Assert.IsFalse(t.GetDependees("x").GetEnumerator().MoveNext()); |
我的方法运行:
1 2 3 4 5 6 | public IEnumerable<string> GetDependees(string s) { HashSet<String> valuesForKey = new HashSet<String>(); dependeeGraph.TryGetValue(s, out valuesForKey); return valuesForKey; } |
号
当它在返回值上碰到
哦……
停止忽略返回值。返回值告诉你"没有数据"。唯一的原因是,在所有的
如果你真的在乎的差异之间的"无数据"和"一个零设置项目",你可以写你自己的扩展方法来简化事情。
1 2 3 4 5 6 7 8 | public static IEnumerable<string> GetValueOrEmpty(this DependencyGraph dg, string s) { HashSet<string> value; if (!dg.TryGetValue(s, out value)) return Enumerable.Empty<string>(); return value; } |