在C#中,List<T>
是一个泛型集合类,它可以存储任何类型的对象,包括值类型(如结构体)和引用类型。当你将值类型(如结构体)添加到 List<T>
中时,值类型不会被装箱。
List<struct>
中的值是否装箱?当你将一个结构体添加到 List<T>
中时,List<T>
会直接存储该结构体的值,而不会进行装箱操作。因为 List<T>
是一个泛型类,它在编译时会被具体化为特定类型的列表,这样可以避免装箱和拆箱的开销。
以下是一个示例,展示了如何在 List<T>
中使用结构体,并验证没有发生装箱操作:
using System;
using System.Collections.Generic;
struct MyStruct
{
public int Value;
}
class Program
{
static void Main()
{
List<MyStruct> myStructList = new List<MyStruct>();
MyStruct myStruct = new MyStruct { Value = 42 };
myStructList.Add(myStruct);
// 访问列表中的元素
MyStruct retrievedStruct = myStructList[0];
Console.WriteLine(retrievedStruct.Value); // 输出: 42
}
}
在这个示例中,MyStruct
是一个结构体。当我们将 MyStruct
实例添加到 List<MyStruct>
中时,没有发生装箱操作。List<T>
直接存储了结构体的值。
装箱通常发生在以下情况下:
object
类型或接口类型:
int value = 42; object obj = value; // 装箱GetType
方法:
int value = 42; Type type = value.GetType(); // 装箱object
参数的方法:
void PrintObject(object obj) { Console.WriteLine(obj); } int value = 42; PrintObject(value); // 装箱领取专属 10元无门槛券
手把手带您无忧上云