J'ai un problème lors de l'utilisation de la réflexion.C# Réflexion Problème
J'ai une classe ETSetting qui contient deux objets: Une valeur actuelle et une valeur 'default'. Chaque fois que la méthode SetToDefault est appelée, je veux définir la valeur actuelle à la valeur par défaut.
Voici ma fonction:
public void SetToDefault() {
foreach (FieldInfo fi in Value.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) {
fi.SetValue(Value, fi.GetValue(defaultVal));
}
}
Cependant, quand j'appelle cela ... Toutes sortes de problèmes se produisent. Je ne peux pas dire avec certitude mais c'est comme si je lisais des parties de la mémoire que je ne devrais pas être (par exemple, quand Value et defaultVal sont toutes deux des chaînes, je reçois toutes sortes de mauvais caractères comme \ t, \ n et caractères chinois).
Évidemment, je fais quelque chose que je ne devrais pas ... Mais quoi?
Merci.
Edit: Voici la classe ETSetting au total:
public sealed class ETSetting {
public object Value;
private object defaultVal;
public ETSetting(object defaultVal) {
Value = this.defaultVal = defaultVal;
}
public void SetToDefault() {
foreach (FieldInfo fi in Value.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) {
fi.SetValue(Value, fi.GetValue(defaultVal));
}
}
}
Quelle est la définition de votre classe 'ETSetting'? – ChrisF
Ajouté à la question de @ChrisF – Xenoprimate
Pouvez-vous fournir un exemple court et compilable reproduisant le problème? – Heinzi