Как мне построить это «выражение» C # во время выполнения с помощью отражения?

По сей день я не нашел отличной статьи о выражений - и как посмотреть на лямбда-выражение C # и сказать: «О, это бла-бла» ... так что, если вы знаете хорошую статью, я тоже был бы признателен за это в качестве ответа.

Пример кода для объяснения вопроса

Итак ... с учетом следующего кода C #:

public class SomeClass<T>
{
    public TResult SomeMethod<TResult>(Expression<Func<T, TResult>> expression)
    {
        // This is just an example... don't get hung up on this :)
        return default(TResult);
    }
}

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

Как мне это сделать ...

var blah = new SomeClass<Person>();

blah.SomeMethod(p => p.FirstName);

во время выполнения (с использованием отражения)?

Что я ожидаю от ответ

Я вроде как ожидал чего-то вроде этого ... но я уверен, что я далек от своего выбора выражений.

// By the way, these values are being passed to me... so you
// can't change this part of the question :)
Type personType = typeof(Person);
string propertyName = "FirstName";

// THIS CODE BELOW IS OBVIOUSLY WRONG, BUT YOU GET THE IDEA OF
// WHAT I HOPE TO DO... THIS LINE OF CODE BELOW IS **ALL** I'M
// ASKING HOW TO DO :)
var expression = Expression.MakeUnary(ExpressionType.Lambda,
    Expression.Property(Expression.Parameter(personType, "p"),
    propertyName), typeof(string));

blah.SomeMethod(expression);
9
задан Timothy Khouri 16 December 2011 в 09:00
поделиться