C# 简单的;Foreach“;问题

C# 简单的;Foreach“;问题,c#,foreach,C#,Foreach,我在visual studio中遇到错误。我已经定义了等级和等级,对吗?我使用这个foreach语句有什么不对 完整代码如下: namespace GradesStr8 { class GradeBook { float passgrade = 70; foreach (float grade in grades) { } public void AddGrade(float grade) {

我在visual studio中遇到错误。我已经定义了等级和等级,对吗?我使用这个
foreach
语句有什么不对

完整代码如下:

namespace GradesStr8 {    
    class GradeBook {

        float passgrade = 70;
        foreach (float grade in grades) {

    }

        public void AddGrade(float grade) {    
            grades.Add(grade);    
        }

        List<float> grades = new List<float>();    
    }
}
名称空间等级STR8{
班级成绩册{
浮动通行等级=70;
foreach(浮动等级){
}
公共坡率(浮动坡率){
等级。添加(等级);
}
列表等级=新列表();
}
}

如果没有函数包装,就无法在类中编写函数代码。 好吧,至少不是以这种形式

你需要问问自己这个函数需要做什么?你想从这个循环中得到什么?这是所有成绩的总和吗?给你一个答案?一般? 如果是这种情况,那么您可能会寻找这种实现:

*注意:您可能会发现LINQ更易于使用,但现在让我们来看一个基本实现

class GradeBook
{
    private readonly List<float> _grades;
    private const float PASSGRADE = 70;

    public GradeBook()
    {
        _grades = new List<float>();
    }

    public void AddGrade(float grade)
    {
        _grades.Add(grade);
    }

    //Your new function
    public float Sum()
    {
        float sum = 0;
        foreach (float grade in _grades)
        {
            sum += grade;
        }
        return sum;
    }

    //Your new function Avg
    public float Avg()
    {
        if(_grades.Count == 0)
        {
            return 0;
        }
        float sum = Sum();
        return sum/_grades.Count;
    }
}
班级成绩册
{
私人只读列表(等级);;
私人常数浮动通行等级=70;
公开成绩册()
{
_等级=新列表();
}
公共坡率(浮动坡率)
{
_等级。添加(等级);
}
//你的新功能
公众浮动金额()
{
浮点数和=0;
foreach(浮动品位,以_品位表示)
{
总和+=等级;
}
回报金额;
}
//你的新函数平均值
公共浮动平均值()
{
如果(_grades.Count==0)
{
返回0;
}
浮点数总和=总和();
返回和/_grades.Count;
}
}

任何循环都必须包含在类成员(如函数)中。不能直接在类中编写循环。 您的实际代码应该如下所示:

public class GradeBook{
    float PassGrade = 70;

    public void FunctionWithLoop(){
        foreach(var grade in grades){
             //Some code
        }
    }
}

如果没有函数,就不能在类定义中编写foreach循环

比如说,如果你的目的是打印所有的分数,你就会这样做

namespace GradesStr8 {    
    class GradeBook {

        List<float> grades = new List<float>();
        float passgrade = 70;    

publuc void PrintGrades()
{

        foreach (float grade in grades) {
        Console.WriteLine(grade);
    }
}

        public void AddGrade(float grade) {    
            grades.Add(grade);    
        }
    }
}
如果您可以在没有函数的情况下使用foreach,那么simple将无法调用它

你需要记住c#it OOP语言。(如果您需要foreach用于程序过程,而不是特定的方法,您可以在Main中使用它(该函数也是…)

例如:

namespace GradesStr8
{
    class GradeBook
    {
        public List<float> grades { get; set; }
        private const float passgrade = 70;

        public GradeBook()
        {
            grades = new List<float>();
        }

        public void AddGrade(float grade)
        {
            grades.Add(grade);
        }
    }

    public class program
    {
        public static void Main()
        {
            GradeBook book = new GradeBook();
            book.grades.Add(75);
            book.grades.Add(46);

            foreach (float grade in book.grades)
            {
                Console.WriteLine(grade);
            }
        }
    }
}
名称空间等级STR8
{
班级成绩册
{
公共列表等级{get;set;}
私人常数浮动通行等级=70;
公开成绩册()
{
等级=新列表();
}
公共坡率(浮动坡率)
{
等级。添加(等级);
}
}
公共课程
{
公共静态void Main()
{
成绩册=新成绩册();
书。等级。加(75);
书.等级.增补(46);
foreach(书本中的浮动等级。等级)
{
控制台写入线(等级);
}
}
}
}

您需要阅读()

您正在类内执行循环。为什么?循环不应该在您的函数中吗?循环只能在属性、方法、构造函数中…@rcs是正确的,在类中您定义的属性和操作不是循环。在任何方法中都使用此循环。如果您发现其中一个答案有效(它们都是分数总和),请将其标记为“正确答案”?也许avg更相关?*添加了avg实现。为什么我必须在函数中编写它?我对其中的一些术语有点迷茫,你能解释一下我不能在课堂上简单地写它的原因吗?看来我正在努力,谢谢!虽然我不完全明白为什么一定是这样。。。
namespace GradesStr8
{
    class GradeBook
    {
        public List<float> grades { get; set; }
        private const float passgrade = 70;

        public GradeBook()
        {
            grades = new List<float>();
        }

        public void AddGrade(float grade)
        {
            grades.Add(grade);
        }
    }

    public class program
    {
        public static void Main()
        {
            GradeBook book = new GradeBook();
            book.grades.Add(75);
            book.grades.Add(46);

            foreach (float grade in book.grades)
            {
                Console.WriteLine(grade);
            }
        }
    }
}