C#索引器学习出现的foreach问题

以下是我看到的部分代码,我想问的是在foreach中它写的是
foreach(CourseScore cs in arrCoureScore);
可是foreach中第一个cs的类型不应该是arrcourscore的类型吗,就比如遍历整形数组foreach(int a in queue);也是用的int类型,这句真的不理解是什么情况,求解,哪位大神帮帮我,

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace ConsoleApplication2
{
    class CourseScore
    {
        private string name;
        private int courseID;
        private int score;

        public CourseScore(string name,int courseID,int score)
        {
            this.name = name;
            this.courseID = courseID;
            this.score=score;
        }
        public string Name
        {
            get { return name; }
            set { name = value;}
        }
        public int CourseID
        {
            get { return courseID; }
            set { courseID = value;}
        }
        public int Score
        {
            get { return score; }
            set { score = value;}
        }
    }

    class CourseScoreIndex
    {
        private ArrayList arrCoureScore = new ArrayList();
        public int this[string name,int coureID]
        {
            get
            {
                foreach(CourseScore cs in arrCoureScore)
                {
                    if(cs.Name==name&&cs.CourseID==coureID)
                    {
                        return cs.Score;
                    }
                }
                return -1;
            }
            set
            {
                arrCoureScore.Add(new CourseScore(name, coureID, value));
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

 foreach(元素类型 变量名 in 集合对象)

比如
int[] array = {1,2,3,4};
foreach (int i in array)
...

因为它要用的是类里面的属性,就像int算是一种类型,类也可以作为一种类型,像方法一样,也有这种用法

不是很懂你的逻辑。arrCoureScore是多个CoureScore的集合。从中取出一个当然是CoureScore类型的了。而不是你说的arrCoureScore类型。