C#中的拳击/拆箱

时间:2017-06-20 15:54:26

标签: c# boxing unboxing

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

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

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

4 个答案:

答案 0 :(得分: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循环演示了如何获取当前元素的类型。

答案 1 :(得分:0)

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

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

由于object是引用类型而int类似728-1是值类型,因此它们被转换为&#34} 34;到运行时的引用类型。这被称为&#34;拳击&#34;。这里,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");

答案 2 :(得分:0)

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

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

将以下值添加到列表中:7,28,-1,true,&#34; chair&#34;

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

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

答案 3 :(得分:0)

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

set.seed (1234)
optimize.portfolio.rebalancing (arg1, arg2, ..)

当项目被装箱时,仍然可以从继承自对象类的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}"); 方法获取类型信息。你只需要看看它是否是一个整数,你就可以继续投射它并将它加到你的总和中。