【发布时间】:2012-09-07 03:49:16
【问题描述】:
我有一个 Vector2 的 Generated 列表,我必须检查字典以查看它们是否存在,这个函数在每个滴答声中执行。
以这种方式运行最快/更好?
public static bool exists(Vector2 Position, Dictionary<Vector2, object> ToCheck)
{
try
{
object Test = ToCheck[Position];
return (true);
}
catch
{
return (false);
}
}
还是我应该坚持规范?
public static bool exists(Vector2 Position, Dictionary<Vector2, object> ToCheck)
{
if (ToCheck.ContainsKey(Position))
{
return (true);
}
return (false);
}
感谢您的意见:)
旁注:(此时键的值并不重要,否则我会使用 TryGetValue 而不是 ContainsKey)
【问题讨论】:
-
你为什么要写第二种方法?您实际上是在用另一个函数调用包装一个函数调用,并且什么也不做。调用者可以直接调用
ContainsKey,而不是调用该函数 -
是的,只需返回
ToCheck.ContainsKey(Position)。 -
@nawfal - 顺便说一句,Servy 说的更深一些。不要简化那个函数(你可以很好地说明简单的单行内容是什么),根本不要编写那个方法。无论有人在哪里做
exists(myPosition, myDictionary),他们都可以简单地拨打标准电话myDictionary.ContainsKey(myPosition。这样任何阅读代码的人都不必去查找这个神秘的exists,它并没有添加任何有用的东西(调用起来并不简单)。 -
实际上,这个问题引出了一个问题:@Dusty 将如何处理结果?这是“优化级别太低”的一个例子。通常不成功。相反,请查看
exists或ContainsKey的使用位置(exists的“调用者”)。如果这些“调用者”中的任何一个对性能至关重要,那么他们是否在ToCheck上进行了多个方法调用,可以用更少的调用来代替?经典的例子是将ToCheck.ContainsKey( key )+... = ToCheck[key]替换为TryGetValue。 那是有希望获得性能提升的地方。
标签: c# dictionary try-catch containskey