Проверка значений элементов класса относительно словаря из другого класса - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть класс некого предмета, который содержит булиновский словарь:
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];
                }
        }
Вот здесь у меня и проблемма. Условие (p_actn.Exp.ContainsKey(field.Name) && (bool)(field.GetValue(a)) && GlobalVars.IsBool(a)) не проходит проверку. Помогите написать метод, пожалуйста. З.Ы. Знаю что после условия не вычисляется среднее значение, мне просто надо, пока, чтобы условие выполниолсь.

Решение задачи: «Проверка значений элементов класса относительно словаря из другого класса»

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()
        {
 
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы