В приведенном ниже коде, как я должен устанавливать переменную «paramType» так, чтобы она соответствовала методу, показанному в вызове GetMethod()?Правильный тип параметра для GetMethod
Код, приведенный ниже, не соответствует методу в классе образца (methodInfo равно null).
using System;
using System.Linq.Expressions;
public class MyClass<TClass>
{
public void MyMethod<TMethod>(Expression<Func<TClass, TMethod>> expr)
{
}
}
class Program
{
static void Main(string[] args)
{
var classType = typeof(MyClass<>);
// What should this really be?
var paramType = typeof(Expression<>).MakeGenericType(typeof(Func<,>));
var methodInfo = classType.GetMethod("MyMethod", new Type[] { paramType });
}
}
EDIT: Я знаю, как получить MethodInfo
с помощью GetMethods
или какой-либо другой формы итерации/предположения. Мой вопрос конкретно в том, как установить System.Type
paramType
, если его даже возможно сгенерировать для него System.Type
.
EDIT 2: Чтобы быть более конкретным с этой проблемой, я обновил код с большим вкусом:
using System;
using System.Linq.Expressions;
public class MyClass<TClass>
{
public void MyMethod<TMethod>(Expression<Func<TClass, TMethod>> expr)
{
Console.WriteLine("Type: {0} Return: {1}", typeof(TClass).Name, typeof(TMethod).Name);
}
public void MyMethod<TMethod>(TMethod param)
{
}
}
class Program
{
public int MyProperty { get; set; }
static void Main(string[] args)
{
var classType = typeof(MyClass<>);
var typeClass = typeof(Program);
var typeMethod = typeof(int);
// What should this really be?
var paramType = typeof(Expression<>)
.MakeGenericType(typeof(Func<,>)
.MakeGenericType(typeClass, typeMethod)
);
var methodInfo = classType
.MakeGenericType(typeClass)
.GetMethod("MyMethod", new Type[] { paramType });
}
}
Это не работает или-это другая версия paramType
с более подробной информацией не похоже, совпадают.
В общем, не случай, кто-то может хотеть назвать «MyMethod», как это:
// I want to use a MethodInfo to perform this function:
new MyClass<Program>().MyMethod(_program => _program.MyProperty);
http://stackoverflow.com/questions/4035719/getmethod-for-generic-method – Dreamweaver
http://stackoverflow.com/questions/269578/get-a-generic-method-without-using-getmethods – Dreamweaver
Спасибо для ссылок, но ни один из них не отвечает на мой конкретный вопрос. Кажется, что один ответ включает итерацию через члены Типа, в то время как другой не вставляет общий тип в другой общий тип. – Veldaeven