Boxing/Unboxing 在 C# 中
Boxing/Unboxing in C#
我在处理 boxing/unboxing 的 C# 作业时遇到问题。路线如下:
- 创建一个对象类型的空列表
- 将以下值添加到列表中:7、28、-1、true、"chair"
- 遍历列表并打印所有值(提示:类型推断可能
在这里帮忙!)
- 将所有Int类型的值相加输出和
我遇到的问题是声明了一个未指定数据类型的列表,因此我可以将不同数据类型的多个值添加到对象中的列表(请参阅第 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
是引用类型,而int
像7
、28
和-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()
方法中获得。你只需要看看它是否是一个整数,你就可以继续进行转换并将其添加到你的总和中。
我在处理 boxing/unboxing 的 C# 作业时遇到问题。路线如下:
- 创建一个对象类型的空列表
- 将以下值添加到列表中:7、28、-1、true、"chair"
- 遍历列表并打印所有值(提示:类型推断可能 在这里帮忙!)
- 将所有Int类型的值相加输出和
我遇到的问题是声明了一个未指定数据类型的列表,因此我可以将不同数据类型的多个值添加到对象中的列表(请参阅第 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
是引用类型,而int
像7
、28
和-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()
方法中获得。你只需要看看它是否是一个整数,你就可以继续进行转换并将其添加到你的总和中。