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);
}

c#设置通过Func<T>传递给方法的属性值

您可以这样更改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 });