Как установить в свойствах пронумерованных объектов значения в массиве с циклом for? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу сделать что-то вроде этого:

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'
}

... Я просто думаю, что в конечном итоге это будет лучше, чем 5, 10 или 100 явных повторений oldObj.Mod1 = obj.ValueList[0].Value.

должно было быть сделано раньше.

Мысли?Помогите?Направление

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Отказ от ответственности : я являюсь владельцем 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);
0 голосов
/ 14 февраля 2019

Я не могу быть уверен, что вам действительно нужно использовать цикл, но вы можете попытаться получить свойства с отражением, а затем установить значения (см .: https://stackoverflow.com/a/30475988/9709828), или вы также можете попробовать поиграть сLINQ для получения необходимого списка свойств oldObj и установки значений через цикл for

...