C# 如何在foreach外部初始化var

C# 如何在foreach外部初始化var,c#,list,initialization,var,C#,List,Initialization,Var,我想在foreach循环之外初始化var 这是我的密码: public List<Course> GetCourse() { IList<Semester> semesters = Semester.Get(); foreach (Semester sm in semesters) { IList<CourseInstance> courseInstances = Co

我想在foreach循环之外初始化var

这是我的密码:

public List<Course> GetCourse()
    {
        IList<Semester> semesters = Semester.Get();     

        foreach (Semester sm in semesters)
        {
            IList<CourseInstance> courseInstances = CourseInstance.Get(sm[0].SemesterId);
            var courseInfos = from c in courseInstances
                                  select new Course { Code = c.Course.Code, Name = c.Course.Name };
        }

        return courseInfos.ToList();
    }
public List GetCourse()
{
IList学期=学期。获取();
foreach(学期中的sm)
{
IList CourseInstance=CourseInstance.Get(sm[0].SemesterId);
var courseinfo=来自courseInstances中的c
选择新课程{Code=c.Course.Code,Name=c.Course.Name};
}
return courseinfo.ToList();
}

如何在foreach循环外初始化CourseInfo?我尝试用null初始化给我错误

var根据初始化时使用的值推断类型,因此使用null初始化永远不会起作用。其他一切都会

我相信你想要的Linq声明是

var courses = semesters
    .SelectMany( s => CourseInstance.Get(s.SemesterId)
    .Select( c => new Course ( Code = c.Course.Code, Name = c.Course.Name ) )
    .ToList();
答案是:

IEnumerable<Course> courseInfos = null;

foreach (Semester sm in semesters)
{
    IList<CourseInstance> courseInstances = CourseInstance.Get(semesters[0].SemesterId);
    courseInfos = from c in courseInstances
                  select new Course { Code = c.Course.Code, Name = c.Course.Name };
}
return courseInfos.ToList();
IEnumerable CourseInfo=null;
foreach(学期中的sm)
{
IList courseInstances=CourseInstance.Get(学期[0].SemesterId);
CourseInfo=来自courseInstances中的c
选择新课程{Code=c.Course.Code,Name=c.Course.Name};
}
return courseinfo.ToList();

但是,除了
foreach
的最后一次迭代之外,您将放弃所有内容。这就是你想要做的吗?

为什么不在第一学期初始化courseInfo的第一个实例,然后在每个学期迭代,有没有理由在第一学期之前初始化courseInfo?

编辑:

如果你想将SemesterName映射到课程列表,我建议你使用字典

 semesters.ToDictionary(semester => semester.Name, semester => 
                        semesters.SelectMany(sid => 
                                       CourseInstance.Get(sid.SemesterId))
                        .Select(c => new Course 
                        {Code = c.Course.Code, Name = c.Course.Name}).ToList())

这将创建一个
字典可能会有帮助。在每次迭代中收集课程信息

  public List<Course> GetCourse()
        {
        IList<Semester> semesters = Semester.Get();

        List<Course> courseInfos = new List<Course>();
        foreach (Semester sm in semesters)
            {
            IList<CourseInstance> courseInstances = CourseInstance.Get(sm.SemesterId);
            IEnumerable<Course> result = from c in courseInstances
                              select new Course { Code = c.Course.Code , Name = c.Course.Name };
            courseInfos.AddRange(result);
            }

        return courseInfos;
        }
public List GetCourse()
{
IList学期=学期。获取();
List CourseInfo=新列表();
foreach(学期中的sm)
{
IList CourseInstance=CourseInstance.Get(sm.SemesterId);
IEnumerable结果=课程中的c
选择新课程{Code=c.Course.Code,Name=c.Course.Name};
课程信息添加范围(结果);
}
返回课程信息;
}

你想用这些代码实现什么?你没有在循环中使用
sm
-为什么?这看起来像是学校作业。我的代码出错了。错误:无法使用[]将索引应用于代码类型为“Serm”的表达式,如果var课程在循环中,我如何循环整个学期?您不需要[0],您希望每个学期循环,不只是第一个问题。我不明白你的第二个问题如果我想输出课程和学期实体,回报类型是什么?你是什么意思?你的意思是把每门课程都映射到它的一个学期吗?我有一个学期->课程一对多的关系。例如,我想返回courseName和SemesterName。我的返回类型是列表。重新运行CourseName和SemesterName的返回类型是什么?如果您想要将学期名称映射到课程列表的一对多关系,我建议使用字典。看上面。哇。。。非常感谢。真的很有帮助。
.SelectMany(sid => CourseInstance.Get(sid.SemesterId)) 
 .Select(c => new Course { Code = c.Course.Code, Name = c.Course.Name }) 
  public List<Course> GetCourse()
        {
        IList<Semester> semesters = Semester.Get();

        List<Course> courseInfos = new List<Course>();
        foreach (Semester sm in semesters)
            {
            IList<CourseInstance> courseInstances = CourseInstance.Get(sm.SemesterId);
            IEnumerable<Course> result = from c in courseInstances
                              select new Course { Code = c.Course.Code , Name = c.Course.Name };
            courseInfos.AddRange(result);
            }

        return courseInfos;
        }