В данный момент мой код успешно устанавливает значение полей / свойств / массивов объекта, используя отражение с указанием пути к полю / свойству от корневого объекта.
, например
//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);' линия
заранее спасибо