//.........................................................................
 public BinOpCacheEntry(Type key1, Type key2, Object val, BinOpCacheEntry next)
 {
     InnerKey1 = key1;
     InnerKey2 = key2;
     InnerValue = val;
     InnerNext = next;
 }
 protected virtual void CacheMethod(Type t1, Type t2, Object method)
 {
     //if can find an existing entry, swap the value
     BinOpCacheEntry e = FindCacheEntry(t1, t2);
     if (e == null)
         InnerCache = new BinOpCacheEntry(t1, t2, method, InnerCache);
     else
         e.Value = method;
 }
 //.........................................................................
 protected virtual void ClearCache()
 {
     InnerCache = null;
 }