【发布时间】: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