Проверка значений элементов класса относительно словаря из другого класса - 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()
{
}
}