コード例 #1
0
        //[Test]
        public void PerformanceTests()
        {
            int    n = 10000000;
            object x = null;

            // ieee.Members[0]
            start = DateTime.Now;
            for (int i = 0; i < n; i++)
            {
                x = ieee.Members[0];
            }
            stop = DateTime.Now;
            PrintTest("ieee.Members[0] (direct)", n, Elapsed);

            start = DateTime.Now;
            IDynamicIndexer members = DynamicIndexer.Create(typeof(ArrayList).GetProperty("Item"));

            for (int i = 0; i < n; i++)
            {
                x = members.GetValue(ieee.Members, 0);
            }
            stop = DateTime.Now;
            PrintTest("ieee.Members[0] (dynamic reflection)", n, Elapsed);

            start = DateTime.Now;
            PropertyInfo membersPi = typeof(ArrayList).GetProperty("Item");

            object[] indexArgs = new object[] { 0 };
            for (int i = 0; i < n; i++)
            {
                x = membersPi.GetValue(ieee.Members, indexArgs);
            }
            stop = DateTime.Now;
            PrintTest("ieee.Members[0] (standard reflection)", n, Elapsed);
        }
コード例 #2
0
 /// <summary>
 /// Returns dynamic indexer if one exists.
 /// </summary>
 /// <param name="indexer">Indexer to look up.</param>
 /// <param name="createCallback">callback function that will be called to create the dynamic indexer</param>
 /// <returns>An <see cref="IDynamicIndexer"/> for the given indexer.</returns>
 internal static IDynamicIndexer GetDynamicIndexer(PropertyInfo indexer, CreateIndexerCallback createCallback)
 {
     lock (indexerCache.SyncRoot)
     {
         IDynamicIndexer dynamicIndexer = (IDynamicIndexer)indexerCache[indexer];
         if (dynamicIndexer == null)
         {
             dynamicIndexer        = createCallback(indexer);
             indexerCache[indexer] = dynamicIndexer;
         }
         return(dynamicIndexer);
     }
 }
コード例 #3
0
        public void TestIndexers()
        {
            IDynamicIndexer members = DynamicIndexer.Create(typeof(ArrayList).GetProperty("Item"));
            Inventor        nikola  = (Inventor)members.GetValue(ieee.Members, new object[] { 0 });

            Assert.AreEqual(tesla, nikola);
            members.SetValue(ieee.Members, new object[] { 0 }, new Inventor("Ana Maria Seovic", new DateTime(2004, 8, 14), "Serbian"));
            Assert.AreEqual("Ana Maria Seovic", ((Inventor)members.GetValue(ieee.Members, 0)).Name);
            members.SetValue(ieee.Members, 1, tesla);
            Assert.AreEqual("Nikola Tesla", ((Inventor)members.GetValue(ieee.Members, 1)).Name);

            IDynamicIndexer officers = DynamicIndexer.Create(typeof(Hashtable).GetProperty("Item"));

            Assert.AreEqual(pupin, officers.GetValue(ieee.Officers, new object[] { "president" }));
            officers.SetValue(ieee.Officers, "president",
                              new Inventor("Aleksandar Seovic", new DateTime(1974, 8, 24), "Serbian"));
            Assert.AreEqual("Aleksandar Seovic", ((Inventor)officers.GetValue(ieee.Officers, "president")).Name);
        }