为了账号安全,请及时绑定邮箱和手机立即绑定

ToList() - 它是否创建新列表?

ToList() - 它是否创建新列表?

C#
慕田峪7331174 2019-08-31 16:22:29
假设我有一堂课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则新列表将包含原始列表中元素的副本,并且更新新列表中元素的属性不会影响原始列表中的等效元素。)


查看完整回答
反对 回复 2019-08-31
?
慕娘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);

}

所以是的,您的原始列表将不会更新(即添加或删除),但引用的对象将会更新。


查看完整回答
反对 回复 2019-08-31
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

ToList 将始终创建一个新列表,该列表不会反映对集合的任何后续更改。


但是,它会反映对象本身的变化(除非它们是可变的结构)。


换句话说,如果使用其他对象替换原始列表中的对象,ToList则仍将包含第一个对象。

但是,如果修改原始列表中的某个对象,ToList则仍将包含相同(已修改)的对象。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 1008 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信