Проверка значений элементов класса относительно словаря из другого класса - 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()
- {
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д