欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# List的賦值問題的解決

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

問題描述

如下圖所示,query1是個(gè)集合,把它賦值給了query2,當(dāng)移除query2里面數(shù)據(jù)的時(shí)候,query1對(duì)應(yīng)的數(shù)據(jù)也被移除了。

在這里插入圖片描述

原因分析:

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

基礎(chǔ)概念:

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

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

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

棧區(qū):存放函數(shù)的參數(shù),局部變量,返回?cái)?shù)據(jù)等值,會(huì)自動(dòng)釋放。

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

值類型和引用類型

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

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

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

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

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

本地測(cè)試:

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

在這里插入圖片描述

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

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

在這里插入圖片描述

在這里插入圖片描述

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

相關(guān)文章

  • C#設(shè)置或驗(yàn)證PDF文本域格式的方法詳解

    C#設(shè)置或驗(yàn)證PDF文本域格式的方法詳解

    PDF中的文本域可以通過設(shè)置不同格式,用于顯示數(shù)字、貨幣、日期、時(shí)間、郵政編碼、電話號(hào)碼和社保號(hào)等等。本文將介紹如何通過C#設(shè)置或驗(yàn)證PDF文本域格式,需要的可以參考一下
    2022-01-01
  • C#多線程系列之手動(dòng)線程通知

    C#多線程系列之手動(dòng)線程通知

    本文詳細(xì)講解了C#多線程中的手動(dòng)線程通知,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • unity實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    unity實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Unity 實(shí)現(xiàn)刪除missing腳本組件

    Unity 實(shí)現(xiàn)刪除missing腳本組件

    這篇文章主要介紹了Unity 刪除missing腳本組件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • c#使用linq技術(shù)創(chuàng)建xml文件的小例子

    c#使用linq技術(shù)創(chuàng)建xml文件的小例子

    c#使用linq技術(shù)創(chuàng)建xml文件的小例子,需要的朋友可以參考一下
    2013-03-03
  • C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    這篇文章主要介紹了C#實(shí)現(xiàn)DevExpress本地化,以實(shí)例形式較為詳細(xì)的分析了DevExpress本地化的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#自定義簡(jiǎn)化cookie類實(shí)例

    C#自定義簡(jiǎn)化cookie類實(shí)例

    這篇文章主要介紹了C#自定義簡(jiǎn)化cookie類,實(shí)例分析了C#操作cookie的添加、獲取及刪除等操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#實(shí)現(xiàn)客戶端彈出消息框封裝類實(shí)例

    C#實(shí)現(xiàn)客戶端彈出消息框封裝類實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)客戶端彈出消息框封裝類,實(shí)例分析了C#彈出窗口的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • c#常用表格控件dataGridView的分頁顯示

    c#常用表格控件dataGridView的分頁顯示

    最近項(xiàng)目需要自己寫了一個(gè)用來給DataGridView分頁用的控件,下面這篇文章主要給大家介紹了關(guān)于c#常用表格控件dataGridView的分頁顯示,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • c# rsa加密解密詳解

    c# rsa加密解密詳解

    這篇文章主要介紹了c# rsa加密解密的的相關(guān)資料,文中代碼非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評(píng)論