public void AddWord(IntellisenseItem word, string group)
 {
     foreach (List<IntellisenseItem> list in Enumerable.Select<string, List<IntellisenseItem>>((IEnumerable<string>) new List<string>(this.IgnoreCase ? WordMatcher.GetSubWord(word.FilterValue.ToLower()) : WordMatcher.GetSubWord(word.FilterValue))
       {
     group
       }, new Func<string, List<IntellisenseItem>>(this.LookupOrAdd)))
       {
     if (Monitor.TryEnter((object) list))
     {
       try
       {
     if (!Enumerable.Contains<IntellisenseItem>((IEnumerable<IntellisenseItem>) list, word, (IEqualityComparer<IntellisenseItem>) this.intellisenseItemComparer))
       list.Add(word);
       }
       finally
       {
     Monitor.Exit((object) list);
       }
     }
       }
 }
 public void RemoveWord(IntellisenseItem word)
 {
     foreach (List<IntellisenseItem> list in Enumerable.Select<string, List<IntellisenseItem>>(Enumerable.Where<string>(WordMatcher.GetSubWord(word.FilterValue), (Func<string, bool>) (item => this.wordTree.ContainsKey(item))), (Func<string, List<IntellisenseItem>>) (item => this.wordTree[item])))
       {
     if (Monitor.TryEnter((object) list))
     {
       try
       {
     if (list.Contains(word))
       list.Remove(word);
       }
       finally
       {
     Monitor.Exit((object) list);
       }
     }
       }
 }