c#由lambda传递的可重用属性

时间:2017-01-07 13:12:28

标签: c# lambda linq-expressions

我正在尝试编写一个方法,将带有属性名称的对象作为lambda参数,并在传递的对象上使用它,但也可以在该方法中创建的另一个相同类型的新对象上使用它。 / p>

目标是在两个对象上使用相同的属性。属性名称应作为参数传递给方法(lambda表达式)。

让我展示我到目前为止所写的内容(不编译):

要使用的对象:

alter table st_overflow_tbl add index uti_idx (uniue_txt_id(32))

与上述对象一起使用的另一个类中的方法:

public class ObjectMy
{
  public string Prop1 {get; set;}
}

我想将ObjectMy实例的方法名称属性传递给“Test string” 然后在另一个新的ObjectMy实例上递归调用DoSomethingOnProperty,并使用与第一次调用DoSomethingOnProperty时相同的属性名称。

我想称之为

public class TestClass1
{
    public void DoSomethingOnProperty(Expression<Func<ObjectMy,string>> propertyName)
    {
        var object1 = new ObjectMy();
        var propertyNameProp = propertyName.Body as MemberExpression;
        propertyNameProp.Member = "Test string"; // error Member is readonly

        //DoSomethingOnProperty(object1.thesameproperty...)

    }
}

感谢。

1 个答案:

答案 0 :(得分:0)

尝试更改您的方法:

public void DoSomethingOnProperty<T>(Expression<Func<T, dynamic>> propertyName) where T : class, new()
    {
        var object1 = Activator.CreateInstance(typeof(T));
        var methodName = (propertyName.Body as MemberExpression).Member.Name;
        var propertyInfo = typeof(T).GetProperty(methodName);
        typeof(T).GetProperty(methodName).SetValue(object1, Convert.ChangeType("Test string", propertyInfo.PropertyType));

        //DoSomethingOnProperty(object1.thesameproperty...)

    }

你可以像

一样使用它
DoSomethingOnProperty<ObjectMy>(x => x.Prop1);