c#设置通过Func传递给方法的属性值
本文关键字:方法 属性 设置 Func | 更新日期: 2023-09-27 18:06:55
我使用这个方法来获取方法中属性的值:
public static T Decrypt<T>(Func<T> prop, string username, string password)
{
T value = prop();
//do cool stuff with t
return value;
}
我正在寻找另一种方法,设置我的属性
的值public static void Encrypt<T>(Func<T> prop, T value, string username, string password)
{
//do stuff with value
??? set prop ???
}
我已经搜索并尝试了表达式,但云不能让它工作:
public static void Encrypt<T>(Expression<Func<T>> property, T value, string username, string password)
{
//do stuff with value
var propertyInfo = ((MemberExpression)property.Body).Member as PropertyInfo;
propertyInfo.SetValue(property, value);
}
您可以这样更改Encrypt
函数:
public static void Encrypt<T>(Action<T> prop, T value, string username, string password)
{
// awesome stuff before
prop(value);
// awesome stuff after
}
则调用Encrypt
:
Encrypt(value => obj.Prop = value, 23, "", "");
你堆栈在SetValue方法如何行为的误解,它需要一个真正的对象作为第一个参数有属性propertyInfo被描述,所以你需要采取对象形式表达式,而不是使用表达式本身,请看看下面的答案在stackoverflow这可能会帮助你链接到文章
您可以尝试通过名称设置属性:
Type t = ctrl.GetType();
t.InvokeMember(propName, BindingFlags.Instance | BindingFlags.SetProperty |BindingFlags.Public, null, ctrl, new object[] { value });