如何使用for循环将带编号的对象属性设置为数组中的值?

时间:2019-02-13 20:13:06

标签: c# expression evaluator

我想做这样的事情:

for (var i =0; i < obj.ValueList.Count; i++)
{
  var runCode = $"oldObj.Mod{i+1} = obj.ValueList[{i}].Value;";
  // Execute runCode; then 'oldObj.Mod1 = obj.ValueList[0].Value'
}

... 我只是认为最终比oldObj.Mod1 = obj.ValueList[0].Value的5或10或100次显式重复更好。

必须已完成。

有什么想法吗?救命?方向?

2 个答案:

答案 0 :(得分:1)

免责声明:我是C# Eval Expression

的所有者

此库允许在运行时执行动态C#代码。它不是免费的,而且可以轻松解决此类问题。

在线示例:https://dotnetfiddle.net/B5t9jD

var oldObj = new OldObj();

var obj = new Obj() { ValueList = new List<ObjValue>() { new ObjValue(111), new ObjValue(222), new ObjValue(333), new ObjValue(444), new ObjValue(555) }};

for (var i = 0; i < obj.ValueList.Count; i++)
{
  var runCode = Eval.Execute("oldObj.Mod" + (i+1) + " = obj.ValueList["+i+"].Value;", new { oldObj, obj});
}

FiddleHelper.Dump(oldObj);

答案 1 :(得分:0)

我不确定您是否真的必须使用for循环,但是您实际上可以尝试通过反射获取属性,然后设置值(请参阅:https://stackoverflow.com/a/30475988/9709828),或者也可以尝试使用LINQ用于获取oldObj的属性列表并通过for循环设置值