我在处理装箱/拆箱的C#任务时遇到了麻烦。以下是方向:
我遇到的麻烦是声明一个没有指定数据类型的列表,所以我可以将不同数据类型的多个值添加到对象的列表中(参见步骤2)。有什么建议?
如果我理解正确,您希望将整数的值一起添加。如果是这种情况,以下代码将帮助您。
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()
方法获得。你只需要看看它是否是一个整数,你可以继续投射它并将它加到你的总和中。
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
是一个引用类型,而int
s就像7
,28
和-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");
创建一个类型为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()));
我希望它会对你有所帮助。