如何解决类型转换问题

时间:2017-03-24 18:56:28

标签: c#

namespace learning
{
    class Gradebook
    {
        public Gradebook()
        {
            grades = new List<float>();  
        }
        public void AddGrade(float grade)
        {
            grades.Add(grade);
        }
        public Gradestatistic compute_statistics()
        {
            Gradestatistic stats = new Gradestatistic();
            float sum = 0f;
            foreach (float grade in grades)
            {
                sum = sum + grade;

            }
            stats.average_grade = sum / grades.Count;
            return stats;
        }
        List<float> grades;


    }
}

我分别使用两个自定义类Gradebook和Gradestatistic,我的class gradestatistic对象是 stats ,average_grade是class gradestatistic的成员,当我构建这个程序时它显示错误 stats .average_grade = sum / grades.Count; 无法隐式将float类型转换为learning.gradestatistic 。 学习是我的项目名称。 等级统计类的代码是

class Gradestatistic
    {

        public Gradestatistic highest_grade;
        public Gradestatistic lowestgrade;
        public Gradestatistic average_grade;
    }

我的program.cs代码是

class Program
    {
        static void Main(string[] args)
        {
            Gradebook book = new Gradebook();
            book.AddGrade(91);
            book.AddGrade(89.9f);
            Gradestatistic stats = book.compute_statistics();

        }
    }

2 个答案:

答案 0 :(得分:0)

代码无法编译,因为您尝试将类型float的值分配给类型为Gradestatistic的字段。 C#是一种类型安全的语言,这意味着您不能将一种类型分配给另一种类型,除非从一种类型转换为另一种类型。

查看您的代码时,您的Gradestatistic字段应该是float类型的字段,而不是Gradestatistic。将它们更改为浮动将解决问题:

class Gradestatistic
{
    public float highest_grade;
    public float lowestgrade;
    public float average_grade;
}

虽然这可以解决您的问题,但是公开类似的类字段被认为是一种糟糕的编程习惯。您可以在以下问题中阅读更多内容:

您应该首选automatic properties公共字段。

答案 1 :(得分:0)

您应该将Gradestatistic类更改为:

class Gradestatistic
{
    public float highest_grade { get; set; }
    public float lowestgrade { get; set; }
    public float average_grade { get; set; }
}