簡體   English   中英

C# 概念拆箱

[英]C# Concept Unboxing

我正在嘗試學習 C# 裝箱和拆箱概念。 我用整數填充了對象列表,然后我想在控制台輸出中總結它們。

List<object> listOfObjects = new List<object>();
//var listOfObjects = new List<object>();

//adding first string to list
listOfObjects.Add("First string");

//adding integers to list
for (int j = 0; j < 5; j++)
{
    listOfObjects.Add(j);
}
listOfObjects.Add("Second string");
for (int k = 5; k < 10; k++)
{
    listOfObjects.Add(k);
}
foreach (var obj in listOfObjects)
{
    Console.WriteLine(obj);
}
var sum = 0;
for (var l = 0;  l < 4;  l++)
{
    sum += (int)listOfObjects[l];            
}
Console.WriteLine(sum);

但輸出拋出異常

拋出異常:ConsoleApp.exe 中的“System.InvalidCastException”發生類型為“System.InvalidCastException”的未處理異常

sum += (int)listOfObjects[l] // this unboxing cause compile error

有人知道為什么嗎? 我使用了MSDN 資源中的示例。

問題是這樣的行:

listOfObjects.Add("First string");

這將一個string添加到列表中,嘗試將其轉換為int是沒有意義的。

刪除諸如此類的行,您應該會得到一個輸出。

由於您的listOfObjects是一個內容類型為objectList ,您可以向其中添加任何內容。 您首先添加一個string ,它是一個對象。 然后你添加一堆int類型的數字,這是一個值類型,所以這些數字在被添加到列表之前被裝箱到一個object中。 然后添加另一個string 然后添加另一組int類型的數字,再次像以前一樣裝箱。

您的問題出在最后一個循環中,在那里您循環了前 4 個元素。 第一個元素是string ,因此您不能將其強制轉換為 int。

'System.InvalidCastException' -> 表示您進行了錯誤的轉換。

因此,如果我們從列表中獲取特殊范圍的項目,在它們轉換為 ( int ) 之后,我們將得到unboxing 的結果。

因為當你把數字加到 Lis 時,拳擊就已經完成了。

希望這個詳細的回復會更友好。

List listOfObjects = new List(); //var listOfObjects = new List();

        //adding first string to list
        listOfObjects.Add("First string");

        //adding integers to list
        for (int j = 0; j < 5; j++)
        {
            listOfObjects.Add(j);
        }
        listOfObjects.Add("Second string");
        for (int k = 5; k < 10; k++)
        {
            listOfObjects.Add(k);
        }
        foreach (var obj in listOfObjects)
        {
            Console.WriteLine(obj);
        }
        var sum = 0;
        for (var l = 0; l < 4; l++)
        {

            var a = listOfObjects[l].GetType();

            if (a == typeof(int))
            {
                sum += (int)listOfObjects[l];
                Console.WriteLine("I've get an integer type.");

            }
            Console.WriteLine("I've get only string type.");
        }
        Console.WriteLine(sum);

        Console.Read();

希望這個修改后的樣本對你有幫助。 祝你好運!

暫無
暫無

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

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