如何在字典中搜索值

fis*_*ead 1 c#

什么是在字典中搜索值的最佳方法.比如我想搜索修改过的对象,是否会通过整个集合才能做到这一点?

c#,.net 2.0

class RecA
 { 
 public bool modified {get;set:}
 public string txt {get;set;}
 }

class RecA_Dic : Dictionary<int,Rec_A>
{

   public bool GetItemByKey(int key,out obj)
   {
    return   this.TryGetValue(key, out obj);
    }

   public List<Rec_A> getModifiedItems()
   {
     List<Rec_A> li = new List<Rec_A>();
     for(int i=0;i<this.count;i++)
      if (((Rec_A)this[i]).modified == true)
       li.Add((Rec_A)this[i]);
     return li;
   }

}
Run Code Online (Sandbox Code Playgroud)

Hum*_*rto 7

鉴于约束(.NET 2.0),您几乎达到目标.IEnumerable<Rec_A>加上yield return是一个更好的选择,IMO:

public IEnumerable<Rec_A> getModifiedItems()
{
  foreach (Rec_A rec in this.Values)
  {
     if (rec.modified)
        yield return rec;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是非常干净但有一个警告:如果由于某种原因,识别修改后的记录意味着他必须从字典中删除它们,这个枚举将抛出. (5认同)
  • @Greg,@ Humberto:post 2.0 aka w/Linq` return this.Values.Where(kvp => kvp.modified);`call` .ToList()`得到一个具体的列表,以避免n8wrl提到的陷阱. (2认同)