Actuellement, mon code définit avec succès la valeur des champs/propriétés/tableaux d'un objet en utilisant la réflexion donnée au chemin/propriété de l'objet racine.Utilisez la réflexion pour définir la valeur d'un champ dans une structure qui fait partie d'un tableau de structures
par exemple.
//MyObject.MySubProperty.MyProperty
SetValue('MySubProperty/MyProperty', 'new value', MyObject);
L'exemple ci-dessus définir la propriété « MyProperty » de l'objet « MyObject » à « nouvelle valeur »
Je ne peux pas utiliser la réflexion pour définir une valeur d'un champ dans une structure qui est partie d'un tableau de structs car la structure est un type de valeur (dans un tableau).
Voici quelques classes de test/struct ...
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; }
est ci-dessous comment je réussi à mettre la valeur des propriétés normales/champs et accessoires/champs dans les listes ...
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);
après que je veux que le myObject.myStructArray [0] .myField = '' ma nouvelle valeur "et myObject.myOtherStructArray [1] .myOtherField = '' ma nouvelle valeur"
Tout ce que je nee d est un remplacement de 'FieldInf.SetValue (foundObject, newValue);' ligne
merci à l'avance
votre réponse, je ne pense pas que cela fonctionnera car la structure est la suivante ... MyObject.myStructArray [0] .myField Donc en utilisant votre méthode Array.SetValue – Mark
...Je voudrais passer dans une nouvelle structure, J'essaie de définir la valeur d'un champ dans une structure thats dans un tableau – Mark
Oui. Chaque fois que vous avez un tableau de structures, c'est la meilleure approche. Vous pouvez le copier dans une nouvelle structure locale, et seulement écraser ce membre, puis le renvoyer. –