假设我有一堂课public class MyObject{ public int SimpleInt{get;set;}}我有一个List<MyObject>,然后我ToList()改变其中一个SimpleInt,将我的更改传播回原始列表。换句话说,以下方法的输出是什么?public void RunChangeList(){ var objs = new List<MyObject>(){new MyObject(){SimpleInt=0}}; var whatInt = ChangeToList(objs );}public int ChangeToList(List<MyObject> objects){ var objectList = objects.ToList(); objectList[0].SimpleInt=5; return objects[0].SimpleInt;}为什么?P / S:如果发现它似乎很明显,我很抱歉。但我现在没有编译器...
3 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
是的,ToList将创建一个新列表,但因为在这种情况下MyObject是一个引用类型,所以新列表将包含对与原始列表相同的对象的引用。
更新SimpleInt新列表中引用的对象的属性也会影响原始列表中的等效对象。
(如果MyObject声明为a struct而不是a,class则新列表将包含原始列表中元素的副本,并且更新新列表中元素的属性不会影响原始列表中的等效元素。)
慕娘9325324
TA贡献1783条经验 获得超4个赞
来自Reflector'd来源:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
return new List<TSource>(source);
}
所以是的,您的原始列表将不会更新(即添加或删除),但引用的对象将会更新。
繁华开满天机
TA贡献1816条经验 获得超4个赞
ToList 将始终创建一个新列表,该列表不会反映对集合的任何后续更改。
但是,它会反映对象本身的变化(除非它们是可变的结构)。
换句话说,如果使用其他对象替换原始列表中的对象,ToList则仍将包含第一个对象。
但是,如果修改原始列表中的某个对象,ToList则仍将包含相同(已修改)的对象。
- 3 回答
- 0 关注
- 1141 浏览
添加回答
举报
0/150
提交
取消