gpt4 book ai didi

c# - 如何控制 IEnumerable 的更新

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:21 26 4
gpt4 key购买 nike

如果我有一个具有以下签名的方法:

public IEnumerable<ScheduleDetailsView> StructureSchedule()
{
bool isStartWeek = false;
int index = -1;
var week = Enum.GetValues(typeof(Week)).Cast<Week>();
var weekLength = Enum.GetNames(typeof(Week)).Length;
List<ScheduleDetailsView> scheduleDetailsViews = new List<ScheduleDetailsView>();
for (int i = 0; i < weekLength; i++)
{
if (isStartWeek)
{
if (WorkingGroup.WeekStart == week.ElementAt(i))
{
index = i;
i = 0;
isStartWeek = false;
}
}
else
{
ScheduleDetailsView scheduleDetailsView = new ScheduleDetailsView(i, week.ElementAt((i + index) % weekLength), false, false,0);
scheduleDetailsViews.Add(scheduleDetailsView);
}
}
return scheduleDetailsViews;
}

public class ScheduleDetailView
{
public ScheduleDetailView(int id, Week workingDay, bool isWeekend, bool isShortDay, int order, int shiftId)
{
Id = id;
WorkingDay = workingDay;
IsWeekend = isWeekend;
IsShortDay = isShortDay;
this.order = order;
ShiftId = shiftId;
}

public int Id { get; set; }
public Week WorkingDay { get; set; }
public bool IsWeekend { get; set; }
public bool IsShortDay { get; set; }
public int order { get; set; }
public int ShiftId { get; set; }
public Shift Shift { get; set; }

}

现在此方法的用户应该只填充此结构中的一些属性(IsWeekend ,IsShortDay ,ShiftId ) 而无需添加新的 ScheduleDetailView 或更改这些项目的顺序或覆盖整个IEnumerable 并将其返回给调用者。

例如:

id  WorkingDay    IsWeekend  IsShortDay   order  ShiftId 
1 6 false false 1 -1
2 7 false false 2 -1
3 1 false false 3 -1
4 2 false false 4 -1
5 3 false false 5 -1
6 4 false false 6 -1
7 5 false false 7 -1

这是接受的:

1     6            true       false         1      -1
2 7 false false 2 -1
3 1 false false 3 -1
4 2 false false 4 -1
5 3 false false 5 -1
6 4 false false 6 -1
7 5 true true 7 -1

这是不允许的:因为它改变了 WorkingDay

1     5            true       false         1      -1
2 7 false false 2 -1
3 1 false false 3 -1
4 2 false false 4 -1
5 3 false false 5 -1
6 4 false false 6 -1
7 6 true true 7 -1

这是不允许的:因为它会从返回的 IEnum 中删除

1     6            true       false         1      -1
2 7 false false 2 -1
3 1 false false 3 -1
4 2 false false 4 -1
5 3 false false 5 -1
6 4 false false 6 -1

如何保证此方法的用户只会更新先前结构中的 (IsWeekend ,IsShortDay ,ShiftId ) 并返回其更新版本中的 IEnumerable。

最佳答案

当您想要这种分离时,您指的是 2 个子系统。至少在逻辑上,他们现在可能处于同一个过程中。

要获得适当的隔离,请使用 DTO(数据传输对象)。那可能是同一个类,但它需要不同的实例。消费者应返回更新的项目列表,然后您将相关属性复制回原始项目。

关于c# - 如何控制 IEnumerable 的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com