Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq更新对象的属性,但更新后的方法计算不正确_C#_Linq_Oop_Properties - Fatal编程技术网

C# 使用linq更新对象的属性,但更新后的方法计算不正确

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

属性正在更新,但当再次调用student的方法时,它将进行计算,但返回0。不过,学生考试totalitem和totalcorrect项已更新并具有价值

这是学生上课的代码

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; }
}