using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
var unboxParam = new object[] {1};
var castParam = new object[] {new Test() {P1 = 1}};
var dictParam = new object[] {new Dictionary<string, object>() {{ "p1", 1 }}};
TestUnboxing(100, unboxParam);
TestCast(100, castParam);
TestDictionary(100, dictParam);
var watch = new Stopwatch();
TestUnboxing(iter, unboxParam);
Console.WriteLine(watch.ElapsedMilliseconds);
TestCast(iter, castParam);
Console.WriteLine(watch.ElapsedMilliseconds);
TestDictionary(iter, dictParam);
Console.WriteLine(watch.ElapsedMilliseconds);
private static void TestUnboxing(int iter, object[] param)
for (var i= 0; i < iter; i++)
private static void TestCast(int iter, object[] param)
for (var i= 0; i < iter; i++)
var num = ((Test)param[0]).P1;
private static void TestDictionary(int iter, object[] param)
for (var i= 0; i < iter; i++)
var num = ((Dictionary<string, object>)param[0])["p1"];