На данный момент мой код успешно устанавливает значение полей/свойств/массивов объекта, используя отражение, учитывая путь к полю/свойству из корневого объекта.
e.g.
//MyObject.MySubProperty.MyProperty
SetValue('MySubProperty/MyProperty', 'new value', MyObject);
В приведенном выше примере для свойства «MyProperty» объекта «MyObject» будет установлено «новое значение».
Я не могу использовать отражение для установки значения поля в структуре, которая является частью массива структур, потому что структура является типом значения (внутри массива).
Вот несколько тестовых классов/структур...
public class MyClass {
public MyStruct[] myStructArray = new MyStruct[] {
new MyStruct() { myField = "change my value" }
};
public MyStruct[] myOtherStructArray = new MyStruct[] {
new MyStruct() { myOtherField = "change my value" },
new MyStruct() { myOtherField = "change my other value" }
};
}
public struct MyStruct { public string myField; public string myOtherField; }
Ниже показано, как я успешно установил значение обычных свойств/полей и реквизитов/полей в списках...
public void SetValue(string pathToData, object newValue, object rootObject)
{
object foundObject = rootObject;
foreach (string element in pathToData.Split("/"))
{
foundObject = //If element is [Blah] then get the
//object at the specified list position
//OR
foundObject = //Else get the field/property
}
//Once found, set the value (this is the bit that doesn't work for
// fields/properties in structs in arrays)
FieldInf.SetValue(foundObject, newValue);
}
object myObject = new MyClass();
SetValue("/myStructArray/[0]/myField", "my new value", myObject);
SetValue("/myOtherStructArray/[1]/myOtherField", "my new value", myObject);
После этого я хочу, чтобы myObject.myStructArray[0].myField = ''мое новое значение" и myObject.myOtherStructArray[1].myOtherField = ''мое новое значение"
Все, что мне нужно, это замена 'FieldInf.SetValue(foundObject, newValue);' линия
заранее спасибо