public void GetEnumerator () { var mc = new PokerMemoryCache ("MyCache"); // This one is a Hashtable enumerator IEnumerator enumerator = ((IEnumerable) mc).GetEnumerator (); // This one is a Dictionary <string, object> enumerator IEnumerator enumerator2 = mc.DoGetEnumerator (); Assert.IsNotNull (enumerator, "#A1-1"); Assert.IsNotNull (enumerator2, "#A1-2"); Assert.IsTrue (enumerator.GetType () != enumerator2.GetType (), "#A1-3"); mc.Set ("key1", "value1", null); mc.Set ("key2", "value2", null); mc.Set ("key3", "value3", null); bool expired = false; var cip = new CacheItemPolicy (); cip.AbsoluteExpiration = DateTime.Now.AddMilliseconds (50); cip.RemovedCallback = (CacheEntryRemovedArguments args) => { expired = true; }; mc.Set ("key4", "value4", cip); Thread.Sleep (100); enumerator = ((IEnumerable) mc).GetEnumerator (); int count = 0; while (enumerator.MoveNext ()) { count++; } Assert.IsFalse (expired, "#A2-1"); Assert.AreEqual (3, count, "#A2-2"); expired = false; cip = new CacheItemPolicy (); cip.AbsoluteExpiration = DateTime.Now.AddMilliseconds (50); cip.RemovedCallback = (CacheEntryRemovedArguments args) => { expired = true; }; mc.Set ("key5", "value5", cip); Thread.Sleep (100); enumerator2 = mc.DoGetEnumerator (); count = 0; while (enumerator2.MoveNext ()) { count++; } Assert.IsFalse (expired, "#A3-1"); Assert.AreEqual (3, count, "#A3-2"); }