亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號