[英]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
是一個內容類型為object
的List
,您可以向其中添加任何內容。 您首先添加一個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.