Считать свойства определенного класса? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь получить количество свойств определенного типа. Например, в классе Player:

public Player(string name, Stat endurance, Stat sprint, Stat dribble, Stat passing, Stat shooting)
{
   //Some code
}

public Stat Endurance { get; private set; }
public Stat Sprint { get; private set; }
public Stat Dribble { get; private set; }
public Stat Passing { get; set; }
public Stat Shooting { get; private set; }

public double OverallSkillLevel { get; private set; }    {

public string Name { get; private set; }    

public void CalculateAverage()
{        
    double sumOfStat = this.Endurance.Level + this.Sprint.Level + 
                       this.Dribble.Level + this.Shooting.Level + 
                       this.Passing.Level;
    //MethodOne:
    Type type =    this.GetType();
    int countOne = type .GetProperties().Count(x => x.MemberType is Stat);

    //MethodTwo
    double countTwo = this.GetType().GetFields().Count(x => x is Stat);

    //this.OverallSkillLevel = Math.Round((sumOfStat /  ), 0);
}

Я ожидаю, что переменные "countOne" или "countTwo" вернут мне в качестве счетчика только те свойства, которые являются Stat. Но я всегда получаю 0

1 Ответ

0 голосов
/ 23 мая 2019

Вы проверяете неправильное свойство вашего PropertyInfo объекта; о свойстве MemberInfo.MemberType из msdn:

При переопределении в производном классе получает значение MemberTypes, указывающее тип члена - метод, конструктор, событие и т. Д.

Вам следует проверить свойство PropertyInfo.PropertyType. Также в этом контексте ваша проверка с использованием ключевого слова is неверна, при сравнении экземпляров Type используются Type.IsAssignableFrom() или ==.

Это должно сработать:

//MethodOne:
int countOne = this.GetType().GetProperties().Count(x => x.PropertyType == typeof(Stat));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...