Skip to content

Instantly share code, notes, and snippets.

@wizact
Last active August 29, 2015 14:14
Show Gist options
  • Save wizact/30927f355858deffefad to your computer and use it in GitHub Desktop.
Save wizact/30927f355858deffefad to your computer and use it in GitHub Desktop.
Creating an object using Lambda Expressions
public static class ReflectionHelper
{
public static T CreateInstance<T>()
{
var constructor = Expression.New( typeof(T) );
var instance = (Func<T>)Expression.Lambda(constructor).Compile();
return instance();
}
public static T CreateInstance<T>(params object[] args)
{
var argumentTypes = args.Select(a => a.GetType()).ToArray();
var argumentExpressions = argumentTypes.Select((t, i) => Expression.Parameter(t, "param" + i)).ToArray();
var constructorInfo = typeof(T).GetConstructor(argumentTypes);
var constructor = Expression.New(constructorInfo, argumentExpressions);
var instance = Expression.Lambda(constructor, argumentExpressions).Compile();
return (T)instance.DynamicInvoke(args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment