using System.Collections.Generic;
using System.Diagnostics;
using ImmediateReflection;
public int Number { get; set; } = 1;
public static void Main()
List<MyClass> myClassList = Enumerable.Repeat(new MyClass(), repeat).ToList();
var sw = Stopwatch.StartNew();
foreach (var obj in myClassList)
Console.WriteLine($"Classic: {sw.Elapsed.TotalMilliseconds} ms. Sum: {sum}");
PropertyInfo info = typeof(MyClass).GetProperty("Number");
foreach (var obj in myClassList)
aux = (int) info.GetValue(obj);
Console.WriteLine($"Reflection: {sw.Elapsed.TotalMilliseconds} ms. Sum: {sum}");
Func<MyClass, int> getter = (Func<MyClass, int>) Delegate.CreateDelegate(typeof(Func<MyClass, int>), null,
typeof(MyClass).GetProperty("Number").GetGetMethod());
foreach (var obj in myClassList)
aux = (int) getter.Invoke(obj);
Console.WriteLine($"Delegate: {sw.Elapsed.TotalMilliseconds} ms. Sum: {sum}");
var typeClass = typeof(MyClass);
foreach (var myClass in myClassList)
aux = (int) myClass.GetPropertyValue("Number");
Console.WriteLine($"Fasterflect not cached: {sw.Elapsed.TotalMilliseconds} ms. Sum: {sum}");
typeClass = typeof(MyClass);
var delegateForGetPropertyValue = typeClass.DelegateForGetPropertyValue("Number");
foreach (var myClass in myClassList)
aux = (int) delegateForGetPropertyValue(myClass);
Console.WriteLine($"Fasterflect cached: {sw.Elapsed.TotalMilliseconds} ms. Sum: {sum}");
var getAccess = TypeAccessor.Get(typeof(MyClass));
var immediateProperty = getAccess.GetProperty("Number");
foreach (var myClass in myClassList)
aux = (int) immediateProperty.GetValue(myClass);
Console.WriteLine($"ImmediateReflection: {sw.Elapsed.TotalMilliseconds} ms. Sum: {sum}");