Обновите свойство объекта с помощью linq, но метод после обновления неправильно вычисляет - PullRequest
0 голосов
/ 15 октября 2018

свойство обновляется, но когда метод студента вызывается снова, он вычисляет, но возвращает 0. хотя итоговый элемент и итоговый элемент студенческого экзамена обновляются и имеют значение.

здесь - код для студентаclass

public class Student : Person, IStudentGrade, IGrade
{
    public List<Exam> ExamList { get; set; }
    public Recitations Recitations { get; set; }

    public double ComputeMidtermGrade()
    {
        var midterm = ExamList.Where(e => e.Term.Equals(Terms.Midterm)).SingleOrDefault();
        var midtermGrade = ((((midterm.TotalCorrectItem / midterm.TotalItem) * 50) / 50) * 0.25) * 100;
        return midtermGrade;
    }

    public double ComputeFinalsGrade()
    {
        var finalsterm = ExamList.Where(e => e.Term.Equals(Terms.Finals)).SingleOrDefault();
        var finalsGrade = ((((finalsterm.TotalCorrectItem / finalsterm.TotalItem) * 50) / 50) * 0.25) * 100;
        return finalsGrade;
    }

    public double ComputePrelimsGrade()
    {
        var prelims = ExamList.Where(e => e.Term.Equals(Terms.Prelims)).SingleOrDefault();
        var prelimGrade = ((((prelims.TotalCorrectItem / prelims.TotalItem) * 50) / 50) * 0.25) * 100;
        return prelimGrade;
    }

    public double RecitaionGrade()
    {
        var sum = Recitations.RecitationsList.Sum(r => r.Grade);
        var recitationGrade = (sum / Recitations.RecitationsList.Count) * 0.25;
        return recitationGrade;
    }

    public double ComputeTotalGrade()
    {
        var totalgrade = ((ComputePrelimsGrade() + ComputeMidtermGrade() + ComputeFinalsGrade() + RecitaionGrade()));
        return totalgrade;
    }
}

это прекрасно работает, как вы можете видеть на первом изображении enter image description here

, но после обновления свойств возвращаемое значение равно 0, то есть свойства имеютзначение.

enter image description here

100%, переданное на рисунке 1, а также новая общая оценка на рисунке 2 была рассчитана с использованием этого метода в классе учащегося.

public double ComputeTotalGrade()
{
    var totalgrade = ((ComputePrelimsGrade() + ComputeMidtermGrade() + ComputeFinalsGrade() + RecitaionGrade()));
    return totalgrade;
}

, поэтому кто-нибудь может мне помочь, почему он возвращает 0 в ComputeMidtermGrade (), ComputeFinalsGrade (), ComputePrelimsGrade ()

enter image description here

послеОбновление оценок учеников так, как вы видите, предварительные, средние и итоговые оценки равны 0. Но предварительный счет у Карла 5/10 баллов (свойство в экзаменационном классе)

public enum Terms { Prelims, Midterm, Finals };
public class Exam
{
    public Terms Term {get; set;}
    public int TotalItem { get; set; }
    public int TotalCorrectItem { get; set; }
}

РЕДАКТИРОВАТЬ: 1-й рисунок 1-й вид, 2-й рис редактировать оценку, 3-й рис 2nd просмотр после редактирования

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 15 октября 2018

в случае, когда TotalCorrectItem меньше, чем TotalItem, результат операции x.TotalCorrectItem / x.TotalItem всегда будет нулевым, поскольку вы используете тип int.Изменить на двойной или десятичный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...