DateTime是值类型,
List<DateTime> dtList = new List<DateTime>();
函数内
DateTime dt = DateTime.Now;
dtList.Add(dt);当函数退出时,dtList里面的dt还有吗?
List<DateTime> dtList = new List<DateTime>();
函数内
DateTime dt = DateTime.Now;
dtList.Add(dt);当函数退出时,dtList里面的dt还有吗?
但是dtList里面还是有dt的值
值类型
拷贝进去了
dt没了
可dtList里面有和dt相同值的DateTime
List.Add方法对输入参数的处理其实就是一个赋值。赋值运算对于引用类型来说会复制该对象的一个引用(C语言里叫做指针);而对值类型来说则会复制该值的一个副本。
可以这样理解:List.Add添加引用类型时是添加它的一个引用,而添加值类型时则是添加它的一个副本,而不是上面说的dt本身。
private void Test<T>(List<T> list)
{
list.Add(DateTime.Now);
}
static void Main()
{
List<DateTime> dtlist = new List<DateTime>();
Test<DateTime>(dtlist);
Console.WriteLine(dtlist.Count);
}