c# - 在 list<> 中添加一个类并再次复制该类并通过一些修改再次添加
问题描述
首先,我在列表<>中添加我的课程:
然后将该类复制到新类,并在更改日期后按照逻辑再次保存在列表<>中,但已保存在列表中的第一个元素的日期也正在更改。
看下图:
这是我的完整代码:
if (Session["CompanyId"] != null)
{
List<CalendarList> CalendartableList = new List<CalendarList>();
DateTime cldate = Convert.ToDateTime(CalendarList.DateDue);
CalendarList.CompanyId = Convert.ToInt32(Session["CompanyId"]);
CalendarList.Category = 15;
CalendarList.Status = 1;
CalendarList.Identifier = 232;
CalendarList.Quarter = 5;
CalendarList.IsCompleted = false;
CalendarList.CalendarGUID = CalendarList.Description;
CalendartableList.Add(CalendarList);
DateTime po_Date = cldate;
int pi_Count = 0;
while (po_Date.Year == DateTime.Now.Year)
{
pi_Count += 1;
switch (CalendarList.Interval)
{
case "Weekly":
{
po_Date = cldate.AddDays(7 * pi_Count);
break;
}
case "Biweekly":
{
po_Date = cldate.AddDays(14 * pi_Count);
break;
}
case "Monthly":
{
po_Date = cldate.AddMonths(1 * pi_Count);
break;
}
default:
{
po_Date = cldate.AddMonths(3 * pi_Count);
break;
}
}
if (po_Date.Year == DateTime.Now.Year)
{
CalendarList newlist = new CalendarList();
newlist = CalendarList;
newlist.DateDue = po_Date.ToString();
CalendartableList.Add(newlist);
}
}
有没有其他方法可以达到同样的效果?
解决方案
您需要记住的是,您将 a 添加reference
到object
列表中,而不是该对象的副本。最简单的解决方法是向您添加一个.Clone()
方法来object
获取其自身的副本并将其创建为新的object
. 克隆的副本可以独立于原始副本进行修改。
推荐阅读
- vue.js - vuejs没有从箭头函数设置数据属性
- laravel - jwt auth 不适用于 Laravel 中的其他控制器?
- python - 如何将一批图像发送到 Tensorflow 服务器?
- python - 在 pandas 中使用 groupby 绘制累积和
- java - 如何通过选择 2 by 2 来计算多个项目的排名
- c - Eclipse IDE 调试器:步入无法正常工作
- node.js - 在 Node.js 服务器上渲染 React
- c++ - 避免c ++编译器警告的正确方法是什么?
- objective-c - 未定义符号:_swift_getOpaqueTypeConformance - React Native & SwiftUI
- javascript - 使用 javascript 在 azure 函数中处理服务总线错误消息