C#中的拳击/拆箱[关闭]

问题描述 投票:-4回答:4

我在处理装箱/拆箱的C#任务时遇到了麻烦。以下是方向:

  • 创建一个类型为object的空List
  • 将以下值添加到列表中:7,28,-1,true,“chair”
  • 循环遍历列表并打印所有值(提示:类型推断可能在这里有帮助!)
  • 将所有Int类型的值一起添加并输出总和

我遇到的麻烦是声明一个没有指定数据类型的列表,所以我可以将不同数据类型的多个值添加到对象的列表中(参见步骤2)。有什么建议?

c# boxing unboxing
4个回答
0
投票

如果我理解正确,您希望将整数的值一起添加。如果是这种情况,以下代码将帮助您。

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}");

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


0
投票
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循环演示了如何获取当前元素的类型。


0
投票

在C#中,您可以为object类型指定任何内容。因此,您应将列表声明为:

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

由于object是一个引用类型,而ints就像728-1是值类型,它们在运行时被“转换”为引用类型。这被称为“拳击”。在这里,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");

0
投票

创建一个类型为object的空List

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()));

我希望它会对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.