ExpressionTree - GetSetMethod Ошибка: метод 'System.String get_Name ()' не определен для типа 'System.String' - PullRequest
0 голосов
/ 08 октября 2010

Вот мой метод:

    public static MethodCallExpression ClonePropertyAssignmentLambda<T>(Expression source, string property)
    {
        var targetExp = Expression.Parameter(typeof (T), "target");
        var propertyInfo = typeof (T).GetProperty(property);
        var targetProperty = Expression.Property(targetExp, propertyInfo);
        var sourceProperty = Expression.Property(source, propertyInfo);

        return Expression.Call(targetProperty, ((PropertyInfo) targetProperty.Member).GetSetMethod(), sourceProperty);
    }

Вот как я его называю:

ClonePropertyAssignmentLambda<Person>(source, "Name")

Я получаю сообщение об ошибке в строке Expression.Call.Я получаю похожую ошибку, если я вызываю GetGetMethod.

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Вы пытаетесь получить свойство Name объекта string.

Измените его на

return Expression.Call(targetExp, propertyInfo.GetSetMethod(), sourceProperty);
0 голосов
/ 08 октября 2010

Неважно, я понял это через 2 секунды после публикации.Почему я всегда так делаю?

Первым параметром для Expression.Call должен быть targetExp.

...