为什么我不能在循环内的列表中替换每个对象的属性?

时间:2017-10-16 02:50:24

标签: c# ienumerable

为什么我不能在循环内的IEnumerble列表中替换每个对象的属性?

 foreach(var group in groupedClassOptions){

            var gradeNo = group.GroupName.Split(' ')[1];

            if (gradeNo != grade0_name)
            {
                var groupTotal = temp.Where(t => t.grade.ToString().Equals(gradeNo)).First().total;
                group.GroupName += " (" + groupTotal + " students)";
            }
            else
            {

                var prepGroupTotal = temp.Where(t => t.grade.ToString().Equals("0")).First().total;
                group.GroupName += " (" + prepGroupTotal + " students)";
            }
        }

退出此循环后,每个元素的属性 GroupName 预计会更改,但它没有。

示例数据 - groupedClassOptions

[GroupName:Grade Prep,

选项:[预备A(23名学生),预备B(21名学生)],

GroupName:1年级,

选项:[1 A(23名学生),1名B(21名学生)],

GroupName:Grade 2,

选项:[2 A(23名学生),2名B(21名学生)],

这只是为了让你可以理解,请忽略任何语法错误。 现在我想将 GroupName:Grade 1 替换为 GroupName:1年级(x学生)

groupsClassOptions的实施

var groupedClassOptions = dataClass.GroupBy(x => x.grade).Select(x => new OptionGroupVM()
        {
            GroupName = "Grade " + (x.Key == 0 ? grade0_name : x.Key.ToString()) /*+ " (" + (groupTotal.Where(t => t.grade.ToString().Equals(x.Key)).First().total) + " students)"*/,
            Options = x.Select(y => new OptionVM()
            {
                Value = y.classID.ToString(),
                Text = x.Key == 0 ? grade0_name + y.classname.Substring(1) + " (" + y.total + " students)" : y.classname + " (" + y.total + " students)"
            })
        });

1 个答案:

答案 0 :(得分:2)

您需要使用Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce gravida eros ut leo commodo luctus. Nulla neque dui, laoreet quis felis in, porta tincidunt felis. Phasellus in lacus et sem condimentum ornare. Praesent vitae nisi tempus, gravida tortor eu, convallis dui. Cras lacinia posuere scelerisque. Vestibulum tincidunt purus id sollicitudin varius. Sed eros urna, mattis nec nunc eu, finibus suscipit ipsum. Aliquam varius faucibus congue. Vivamus convallis imperdiet sem a commodo. Proin cursus feugiat sem a pharetra. Curabitur rhoncus non quam sit amet lacinia. Sed ut nisl id odio faucibus vehicula vel ut erat. Vestibulum ut iaculis magna. Quisque sit amet massa sodales, suscipit nisl eu, dapibus elit. Morbi posuere ligula pretium commodo semper. Nam odio elit, rutrum finibus tortor eget, viverra viverra metus. Proin tincidunt tempor ex pretium rhoncus. Proin egestas erat sed eros congue, mollis gravida magna bibendum. Pellentesque vel bibendum nunc. Orci varius natoque penatibus et magnis dis viverra fusce. 方法将groupedClassOptions转换为列表,这样您的ToList()内的对象才可以更新。

list

现在,更新列表中的对象。

不在IEnumerable中更新对象的原因发布在following answer

  

IEnumerables不保证更新的值会持续存在   跨枚举。例如,List将返回相同的一组   每次迭代都有对象,所以如果你更新一个属性,它就会是   跨迭代保存。但是,许多其他实现   IEnumerables每次返回一组新对象,因此任何更改   制造不会持久。