最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# List的賦值問題的解決

 更新時間:2022年07月22日 09:46:20   作者:akhdjkrhyiewbhgj  
本文主要介紹了C# List的賦值問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

問題描述

如下圖所示,query1是個集合,把它賦值給了query2,當移除query2里面數(shù)據(jù)的時候,query1對應的數(shù)據(jù)也被移除了。

在這里插入圖片描述

原因分析:

對此猜測是引用類型的問題,類似于淺拷貝深拷貝那種概念。

基礎(chǔ)概念:

對于上述的情況,要怎么去賦值,以及不同的寫法對應的結(jié)果是什么樣的呢,我做了如下測試 ,在看結(jié)果之前,先了解一下相關(guān)概念。

C#中的堆和棧:(指的是程序運行時的內(nèi)存區(qū)域)

內(nèi)存分為堆區(qū)域和棧區(qū)域,??臻g比較小,但是讀取速度快(先進后出),堆空間比較大,但是讀取速度慢。

棧區(qū):存放函數(shù)的參數(shù),局部變量,返回數(shù)據(jù)等值,會自動釋放。

堆區(qū):存放著引用類型的對象,會由GC來自動釋放。

值類型和引用類型

值類型:在方法傳遞的時候,傳遞的是自身的“拷貝”。
(例如:結(jié)構(gòu)體struct,數(shù)據(jù)類型short/int/double/bool,枚舉類型enum,可空類型)

引用類型:引用類型則是傳遞的自身的“地址”。
( 例如:數(shù)組,類,接口,委托,object,string)

值類型只需要一段單獨的內(nèi)存(此處指棧區(qū)內(nèi)存),用于存儲實際的數(shù)據(jù)。

引用類型需要兩段內(nèi)存,第一段存儲實際的數(shù)據(jù),位于堆中。第二段是一個引用,存儲在棧里,指向數(shù)據(jù)在堆中的存放位置。

特點:
1、值類型變量聲明后,不管是否已經(jīng)賦值,編譯器為其分配內(nèi)存。
2、引用類型當聲明一個類時,只在棧中分配一小片內(nèi)存用于容納一個地址,而此時并沒有為其分配堆上的內(nèi)存空間。當使用 new
創(chuàng)建一個類的實例時,分配堆上的空間,并把堆上空間的地址保存到棧上分配的小片空間中。
3、值類型的實例通常是在線程棧上分配的(靜態(tài)分配),但是在某些情形下可以存儲在堆中。(某些情況指的是:作為字段時,跟隨其所屬的變量(實例)存儲;作為局部變量時,存儲在棧上。)
4、引用類型的對象總是在進程堆中分配(動態(tài)分配)。

本地測試:

下圖展示了4個list以及對應的賦值情況,從結(jié)果可以看出,list1、list3、list4的棧區(qū)內(nèi)容都指向了同一個堆地址,所以當這三個list任意一個刪除數(shù)據(jù)或添加數(shù)據(jù),其他兩個也會變化。而list2由于指向的堆地址跟其他三個不同,所以list2的數(shù)據(jù)變化不會影響到list1、list3、list4。

在這里插入圖片描述

其中l(wèi)ist4比較出乎我的意料,印象中l(wèi)ist t=new list中的關(guān)鍵字new,會在托管堆上重新分配空間,并返回一個該空間的地址,但是從結(jié)果上來看,list4還是指向了list1的堆地址。猜測可能是編譯器的自動優(yōu)化?就像string的賦值那樣?

下面是string的測試,圖一是定義了三個變量,a、b、c,可以看出,a和b雖然是分別定義并且分別賦值的,但由于值一樣,最終還是指向了同一個堆地址。而圖二中,給a重新賦值后,發(fā)現(xiàn)它并沒有去更改原地址中的數(shù)據(jù),而是在堆中開辟了一塊新的空間,并指向了這個新的堆地址(在棧中的地址沒變)。

在這里插入圖片描述

在這里插入圖片描述

 到此這篇關(guān)于C# List的賦值問題的解決的文章就介紹到這了,更多相關(guān)C# List賦值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#如何通過probing指定dll尋找文件夾詳解

    C#如何通過probing指定dll尋找文件夾詳解

    這篇文章主要給大家介紹了關(guān)于C#如何通過probing指定dll尋找文件夾的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • C#實現(xiàn)動態(tài)數(shù)字時鐘和日歷

    C#實現(xiàn)動態(tài)數(shù)字時鐘和日歷

    這篇文章主要為大家詳細介紹了C#實現(xiàn)動態(tài)數(shù)字時鐘和日歷的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Winform窗體中打開PDF文件的三種方式

    Winform窗體中打開PDF文件的三種方式

    這篇文章介紹了Winform窗體中打開PDF文件的三種方式,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#實現(xiàn)Excel導入sqlite的方法

    C#實現(xiàn)Excel導入sqlite的方法

    這篇文章主要介紹了C#實現(xiàn)Excel導入sqlite的方法,是C#程序設(shè)計中非常重要的一個實用技巧,需要的朋友可以參考下
    2014-09-09
  • C#實現(xiàn)簡單過濾非法字符實例

    C#實現(xiàn)簡單過濾非法字符實例

    這篇文章主要介紹了C#實現(xiàn)簡單過濾非法字符的方法,涉及C#針對字符串遍歷與判斷的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-11-11
  • word ppt excel文檔轉(zhuǎn)換成pdf的C#實現(xiàn)代碼

    word ppt excel文檔轉(zhuǎn)換成pdf的C#實現(xiàn)代碼

    這篇文章主要介紹了word ppt excel文檔轉(zhuǎn)換成pdf的C#實現(xiàn)代碼,有需要的朋友可以參考一下
    2014-01-01
  • 使用C#的aforge類庫識別驗證碼實例

    使用C#的aforge類庫識別驗證碼實例

    這篇文章主要介紹了使用C#的aforge類庫識別驗證碼實例,aforge類庫是一個非常強大的類庫,包括計算機視覺與人工智能、圖像處理、神經(jīng)網(wǎng)絡、遺傳算法、機器學習、機器人等領(lǐng)域,需要的朋友可以參考下
    2014-08-08
  • C#?模式匹配完全指南

    C#?模式匹配完全指南

    模式匹配是一種高端的使用機制,它允許程序員在開發(fā)的時候以對象的類型作為條件篩選和分情況處理的一種手段,本文給大家介紹C#?模式匹配完全指南,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • C#類中方法的執(zhí)行順序是什么

    C#類中方法的執(zhí)行順序是什么

    有些中級開發(fā)小伙伴還是搞不太明白在繼承父類以及不同場景實例化的情況下,父類和子類的各種方法的執(zhí)行順序到底是什么,本文就來介紹一下
    2021-05-05
  • C#異常執(zhí)行重試的實現(xiàn)方法

    C#異常執(zhí)行重試的實現(xiàn)方法

    這篇文章主要介紹了C#異常執(zhí)行重試的一種實現(xiàn)方法,重試模式可以用poll替代,通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08

最新評論

邢台县| 四川省| 吴江市| 商水县| 丘北县| 虎林市| 祁东县| 凤庆县| 塔城市| 石林| 阳泉市| 涞源县| 卢湾区| 鄂托克旗| 石台县| 麻栗坡县| 巍山| 当雄县| 九龙坡区| 祁东县| 馆陶县| 会东县| 长岛县| 鲜城| 惠来县| 烟台市| 淳化县| 芜湖市| 泗水县| 阳信县| 东乌| 邢台市| 顺昌县| 江陵县| 玉环县| 宁陵县| 湘阴县| 甘洛县| 尚志市| 松滋市| 徐水县|