The .Net Hashtable (and it's Java cousin, the Hashmap) have some fairly complex internals using hashtrees and bucket algorithms to ensure that objects are quickly retreived from them. But don't let that stop you from writing your own retreival mechanism. As Simon Dyson's former co-worker would say, who needs ContainsValue() when you can have isInList()?

private bool isInList(string name)
{
  bool found = false;

  Hashtable tempHt = SystemCache.getProductNames();
  IDictionaryEnumerator en = tempHt.GetEnumerator();
  while (en.MoveNext())
  {
    if ((((string)tempHt[en.Key]) == name))
    {
      found = true;
    }
  }
  return found;
}
[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!