Хорошо, я думаю, что понимаю вопрос.
Приведенный пример ввода:
Type typeOfT = typeof(int);
Type typeOfTProperty = typeof(string);
object someValue = "Test";
Вы хотите создать код, эквивалентный:
var myClassInstance = new MyClass<int, string>(t => "Test");
Вот какВы можете сделать это.
Сначала создайте дерево выражений:
var parameter = Expression.Parameter(typeOfT, "t");
var body = Expression.Constant(someValue, typeOfTProperty);
// Will automatically be an Expression<Func<T, TProperty>> without any extra effort.
var lambda = Expression.Lambda(body, parameter);
И затем используйте отражение для создания экземпляра MyClass<T, TProperty>
:
var myClassType = typeof(MyClass<,>).MakeGenericType(typeOfT, typeOfTProperty);
// Make the MyClass<,> constructor public first...
var myClassInstance = Activator.CreateInstance(myClassType, lambda);