这有效:
public override bool GetAppointments(CalendarModel calendar, DateTime startDate, DateTime endDate) {
foreach (var googcal in _settings.Calendars.Where(googcal => googcal.Selected)) {
var eventQuery = new EventQuery {
Uri = new Uri(googcal.ProviderData),
// Passed in startDate/endDate are inclusive
StartTime = startDate.Date,
EndTime = endDate.Date.AddDays(1).AddMilliseconds(-1)
};
var eventFeed = Service.Query(eventQuery);
foreach (EventEntry appt in eventFeed.Entries) {
...
}
}
return true;
}
这不是:
public override bool GetAppointments(CalendarModel calendar, DateTime startDate, DateTime endDate) {
foreach (var googcal in _settings.Calendars.Where(googcal => googcal.Selected)) {
var eventQuery = new EventQuery {
// Passed in startDate/endDate are inclusive
StartTime = startDate.Date,
EndTime = endDate.Date.AddDays(1).AddMilliseconds(-1),
Uri = new Uri(googcal.ProviderData)
};
var eventFeed = Service.Query(eventQuery);
foreach (EventEntry appt in eventFeed.Entries) {
...
}
}
return true;
}
在第一种情况下,Event.Query.StartTime
和EndTime
按预期正确设置。
在第二种情况下,它们未初始化(1/1/0001 12:00:00 AM
)。
唯一的区别是对象初始值设定项中属性的顺序。
对于笑容,我做了这样的命令:
// Passed in startDate/endDate are inclusive
StartTime = startDate.Date,
Uri = new Uri(googcal.ProviderData),
EndTime = endDate.Date.AddDays(1).AddMilliseconds(-1)
且确定EndTime
是正确的,但StartTime
未正式发布。
这对我没有意义。怎么会这样?
答案 0 :(得分:4)
对象初始值设定项只是设置属性。将一个属性设置在另一个属性之前的任何副作用都将是可见的,就像你用手写出来一样:
var tmp = new EventQuery();
tmp.StartTime = startDate.Date;
tmp.EndTime = endDate.Date.AddDays(1).AddMilliseconds(-1);
tmp.Uri = new Uri(googcal.ProviderData);
var eventQuery = tmp;
在这种情况下,我怀疑通过设置{{1}来设置StartTime
/ EndTime
但重置,将某些内部状态添加到 }}
编辑:好的,我现在找到了the relevant code。
Uri
来自EventQuery
。在FeedQuery
调用Uri
上设置FeedQuery
,然后调用所有内部属性。
基本上,当你有相互关联的属性时,总会发生这种事情。想象一下,你有一个类型的ParseUri
属性反映了宽度和高度,也可以独立设置 - 你可以写:
Size
最终尺寸为200x20。基本上,当您理解var foo = new Foo {
Width = 100,
Size = new Size(200, 50),
Height = 20
};
是表示完整查询URI的属性而不仅仅是词干时,这一切都是有意义的。
答案 1 :(得分:2)
令人惊讶的是,在Stack Overflow上提问的行为可以帮助您了解正在发生的事情。我在这里留下这个问题,这样任何遇到这个问题的人都会知道发生了什么......我不可能是唯一会遇到这个问题的人。
在Google Calendar API V2中,我在这里使用的.NET库具有我认为EventQuery
类中的错误。
具体来说,设置Uri
会对对象产生副作用。具体来说,它会导致StartTime
和EndTime
属性被初始化。
我通过这样做修复了我的代码:
var eventQuery = new EventQuery(googcal.ProviderData) {
StartTime = startDate.Date,
EndTime = endDate.Date.AddDays(1).AddMilliseconds(-1)
};
IOW,在构造函数中设置Uri。