Проверка значений элементов класса относительно словаря из другого класса - C#
Формулировка задачи:
Доброго времени суток!
Есть класс некого предмета, который содержит булиновский словарь:
И есть второй клас действий, вложенный в класс объекта, который имеет также свой словарь, с ключовыми словами идентичными первому словарю но уже типа дабл.
Класс объекта имеет метод, который должен вычислить среднее значение элементов словаря класса действий, относительно значений словаря класса предмета и записать это значение в соответствующую переменную в классе действий.
Вот здесь у меня и проблемма. Условие (p_actn.Exp.ContainsKey(field.Name) && (bool)(field.GetValue(a)) && GlobalVars.IsBool(a)) не проходит проверку. Помогите написать метод, пожалуйста.
З.Ы.
Знаю что после условия не вычисляется среднее значение, мне просто надо, пока, чтобы условие выполниолсь.
public class SomeObject { // кольори public bool red = false, orange = false, yellow = false, green = false, blue = false, violet = false, black = false, brown = false, white = false, // смак bitter = false, sweet = false, salt = false, sour = false, ...
public abstract class PersonActions { public Dictionary<string, double> Exp = new Dictionary<string, double>() { // кольори ["red"] = 1, ["orange"] = 0.8, ["pink"] = 0.8, ["yellow"] = 0.8, ["green"] = 0.8, ["blue"] = 0.8, ["violet"] = 0.8, ["black"] = 0.8, ["brown"] = 0.8, ... public abstract int Execute(SomeObject a); } ... public class Persone : SomeObject { public class Eats : PersonActions { public override int Execute(SomeObject obj) { GlobalVars.ObjectsOnMap.Remove(obj); return obj.health; } } } private Eats Eat = new Eats(); ...
public void Calculate_Motivation(PersonActions p_actn, SomeObject a) { foreach (var field in a.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic)) if (p_actn.Exp.ContainsKey(field.Name) && (bool)(field.GetValue(a)) && GlobalVars.IsBool(a)) { p_actn.motivation += p_actn.Exp[field.Name]; } }
Решение задачи: «Проверка значений элементов класса относительно словаря из другого класса»
textual
Листинг программы
public class Person { //если Subject должен быть глобальным объектом, смотрите паттерн синглтон Subject subject = new Subject(); // безпонятия что у вас означало Exp Dictionary<SubjectProperties, double> PersonExp = new Dictionary<SubjectProperties, double>() { [SubjectProperties.Red] = 1, [SubjectProperties.Orange] = 0.8 }; public Person() { } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д