C# 使用linq更新对象的属性,但更新后的方法计算不正确
属性正在更新,但当再次调用student的方法时,它将进行计算,但返回0。不过,学生考试totalitem和totalcorrect项已更新并具有价值 这是学生上课的代码C# 使用linq更新对象的属性,但更新后的方法计算不正确,c#,linq,oop,properties,C#,Linq,Oop,Properties,属性正在更新,但当再次调用student的方法时,它将进行计算,但返回0。不过,学生考试totalitem和totalcorrect项已更新并具有价值 这是学生上课的代码 public class Student : Person, IStudentGrade, IGrade { public List<Exam> ExamList { get; set; } public Recitations Recitations { get; set; } publ
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;
}
}
有人能帮我解释为什么它在ComputeMidtermGrade、ComputeFinalsGrade、ComputePreLimGrade中返回0吗
更新学生成绩后查看,因为您可以看到预科、期中和期末成绩为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; }
}
编辑:
第一张图片第一视图,第二张图片编辑等级,第三张图片编辑后第二视图
如果TotalCorrectItem小于TotalItem,则操作x.TotalCorrectItem/x.TotalItem的结果将始终为零,因为您使用int类型。更改为双精度或十进制 调试代码。查找更新后Exam.TotalCorrectItem为0的原因。此外,x*50/50始终为xit,具有值Exam.TotalCorrectItem和Exam.TotalCorrectItem您可以在最后一张图像prelim分数中看到它:karl 5/10,5是考试总正确项,10是图腾。但它在prelim中返回0。我刚刚调用了在第一幅图像中使用的方法,该方法计算prelim等级。或者使用doublex.TotalCorrectItem/doublex.TotalItem…并将其存储在浮点中,我已经有了相应的条件。正如您在第一张图片中看到的,它已经开始工作了。但一旦我更新了学生的成绩。然后调用它返回的计算方法0当您得到总成绩为零时,midterm.TotalCorrectItem、midterm.TotalItem、FinalTerm.TotalCorrectItem、FinalTerm.TotalItem、prelims.TotalCorrectItem、prelims.TotalItem的值是多少?5和10,正如我所说understand@Z.R.T我会编辑我的帖子。我将在更新属性之前和之后上载新映像。请尝试公用双TotalItem{get;set;}和公用双TotalCorrectItem{get;set;}
public enum Terms { Prelims, Midterm, Finals };
public class Exam
{
public Terms Term {get; set;}
public int TotalItem { get; set; }
public int TotalCorrectItem { get; set; }
}