簡體   English   中英

在C#中從列表到對象的裝箱和取消裝箱

[英]Boxing and UnBoxing from List to Object in C#

我想知道我的做法是對還是錯?

請參閱這兩個陳述

情況1

List<string> person = new List<string>() {
                            "Harry"
                            "Emma"
                            "Watson"
                        }

案例:#2

Object person = new List<string>() {
                            "Harry"
                            "Emma"
                            "Watson"
                        }

讓我知道

哪個聲明是拳擊 ,哪個聲明是解

這兩個陳述是相同和相同的 ???

沒有拳擊因為List是引用類型:

Boxing是將值類型轉換為類型對象或由此值類型實現的任何接口類型的過程

取消裝箱從對象中提取值類型。 拳擊是隱含的; 拆箱是明確的。 裝箱和拆箱的概念是類型系統的C#統一視圖的基礎,其中任何類型的值都可以被視為對象。

閱讀更多: MSDN

這是拳擊:

int i = 123;
// The following line boxes i.
object o = i;  

這是拆箱:

o = 123;
i = (int)o;  // unboxing

他們都不是。 裝箱和拆箱是一種機制,用於處理.NET中統一類型系統的值類型。

例如:

int i = 4;
object o = i; //boxing, int is boxed in an object
int j = (int)o; //unboxing, an int is unboxed from an object

來自MSDN
在此輸入圖像描述

詳細了解我們為什么需要拳擊和拆箱

在可空類型的拳擊中有一個特例。 當一個可以為空的類型框時,它將其框作為其值或為null。 您不能擁有可以為空的值。

int? a = 4;
object o = a; //boxing, o is a boxed int now
Console.WriteLine(o.GetType()); //System.Int32
int? b = null;
o = b; //boxing, o is null
Console.WriteLine(o.GetType()); // NullReferenceException

它不是拳擊或拆箱。

拳擊意味着你的存儲value typethe reference type ,並且拆箱是相反boxing

在您的示例中,List和Object都是reference type 。您只使用引用

int i = 123;
// The following line boxes i.
object o = i;  

o = 123;
i = (int)o;  // unboxing

int -> object boxing

object -> int unboxing

有關更多信息,請參閱此處拳擊和拆箱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM