我正在将参数和值列表从Class_B传递给Class_A。 Class_A必须设置名称包含在参数中的参数的值。
struct Parameter
{
public Parameter(string n , object v, Type t){Name = n; Value=v; TypeOfParam = t;}
public string Name;
public object Value;
public Type TypeOfParam;
}
Class_A
{
public Class_A(List<Parameter> parameters)
{
// needed code to set variables values
}
public int param1{get; set;}
public double param2{get; set;}
}
Class_B
{
List<Parameter> params = new List<Parameter>(){new Parameter("param1", 12, typeof(int)), new Parameter("param2", 20.2f, typeof(double))};
Class_A classA = new Class_A(params);
}
是否可以通过名称访问变量的引用并设置其值?
首选这样的解决方案:
var variable = (parameter.TypeOfVariable)(GetVariableReferenceByName(parameter.Name));
variable = parameter.Value;
而不是像这样的东西:
GetField(parameter.Name).SetValue(parameter.Value);
但是两种解决方案都将受到赞赏。
答案 0 :(得分:0)
您可以使用Reflection实现此目的
public void MapValues(object dst, List<Parameter> source)
{
var dict = source.ToDictionary(x => x.Name, x => x);
var fields = dst.GetType().GetProperties().ToList();
fields.ForEach(x =>
{
var param = dict.ContainsKey(x.Name) ? dict[x.Name] : null;
if(param != null)
x.SetValue(dst, param.Value);
});
}
public Class_A(List<Parameter> parameters)
{
MapValues(this, parameters);
}
如果您打算在其他类中使用相同的模式,最好将MapValues移到另一个实用程序类中