Boxing/Unboxing 在 C# 中

Boxing/Unboxing in C#

我在处理 boxing/unboxing 的 C# 作业时遇到问题。路线如下:

我遇到的问题是声明了一个未指定数据类型的列表,因此我可以将不同数据类型的多个值添加到对象中的列表(请参阅第 2 步)。有什么建议吗?

List<object> objectList = new List<object>();
objectList.Add("This is a string");
objectList.Add(64);
objectList.Add(154.2f);

万物皆对象。因此,您可以将其添加到对象列表中。

for(int i=0; i < objectList.Length; i++) {
  Console.WriteLine(objectList[i].GetType().ToString());
}

for循环演示了如何获取当前元素的类型。

在 C# 中,您可以将 任何东西 分配给 object 类型。因此,您应该将列表声明为:

List<object> myList = new List<object> { 7, 28, -1, true, "chair" };

由于object是引用类型,而int728-1是值类型,所以它们是"converted" 到运行时的引用类型。这叫做"boxing"。这里,7, 28, -1, true是加框的,因为都是值类型。 "chair" 未装箱,因为 String 是引用类型。

此外,如果 new List<object> { 7, 28, -1, true, "chair" } 语法对您来说很陌生,它与以下内容相同:

List<object> myList = new List<object>();
myList.Add(7);
myList.Add(28);
myList.Add(-1);
myList.Add(true);
myList.Add("chair");

创建一个对象类型的空列表

List<object> list = new List<object>();

将以下值添加到列表中:7、28、-1、true、"chair"

list.Add(7);
list.Add(28);
list.Add(-1);
list.Add(true);
list.Add("chair");

遍历列表并打印所有值并检查类型

foreach (object item in list)
{
    if (item.GetType() == typeof(int))
    {
        //int type
    }
    else if (item.GetType() == typeof(bool))
    {
        // bool type
    }
    else if (item.GetType() == typeof(string))
    {
        //string type
    }
    else
    {
        //other type
    }
}

所有Int类型的值放在一起输出和

int sum = list.Where(x => x.GetType() == typeof(int))
.Sum(x => int.Parse(x.ToString()));

希望对你有所帮助

如果我没理解错的话,您想将整数的值相加。如果是这样,下面的代码将帮助你。

var items = new List<object> { 7, 28, -1, true, "chair" };
int sum = 0;

foreach(var item in items)
{
    Console.WriteLine(item);
    if (item.GetType() == typeof(int))
        sum += (int)item;
}

// Now display the sum
Console.WriteLine($"The sum is: {sum}");

当一个项目被装箱时,类型信息仍然可以从继承自对象 class 的 GetType() 方法中获得。你只需要看看它是否是一个整数,你就可以继续进行转换并将其添加到你的总和中。