我正在尝试编写一个方法,将带有属性名称的对象作为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...)
}
}
感谢。
答案 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);