【问题标题】:Failed to set property using reflection使用反射设置属性失败
【发布时间】:2015-12-01 19:46:12
【问题描述】:

我正在创建一个动态类并使用反射来分配属性值,该类有两个属性

public int Tipo_Pension {set;get;}
public bool Novedad_TDP {set;get;}

我使用以下代码来设置值。 VariableName 是属性的名称,Value 是要设置的属性的真实值,ruleMeta.Evaluator 是 binder。

private void SetVariable(string VariableName, object Value, RuleMeta ruleMeta)
{
    o = ruleMeta.EvaluatorType.InvokeMember(
        VariableName,
        BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
        Type.DefaultBinder,
        ruleMeta.Evaluator,
        new object[] { Value }
    );
}

第一个属性 Integer 可以正常工作,但是当它为 Boolean 执行时,它会失败并引发下一个错误

Method 'Cenet.RulesManager.Rule360788846.Novedad_TDP' not found

知道会发生什么吗?

注意:布尔值的对象值以字符串形式出现:“false”

【问题讨论】:

  • 尝试使用set_Novedad_TDP作为方法名。
  • 你说你在创建一个动态类,为什么不在方法里面((dynamic)ruleMeta).Novedad_TDP = Value而不是使用反射呢?当然,假设您首先将 Value 解析为 bool
  • 那是因为你正在传递字符串。你应该传递布尔值。使用 Convert.ToBoolean。
  • 是的,M.kazem Akhgary 你完全正确,我的错。

标签: c# dynamic reflection


【解决方案1】:

正如 M.kazem Akhgary 发布的那样,我正在使用字符串设置布尔值,就这么简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多