internal void AddRule(T newRule)
 {
     lock (this.cacheLock)
     {
         this._rules = RuleCache <T> .AddOrInsert(this._rules, newRule);
     }
 }
 internal void ReplaceRule(T oldRule, T newRule)
 {
     lock (this.cacheLock)
     {
         int index = Array.IndexOf <T>(this._rules, oldRule);
         if (index >= 0)
         {
             this._rules[index] = newRule;
         }
         else
         {
             this._rules = RuleCache <T> .AddOrInsert(this._rules, newRule);
         }
     }
 }