设置 EventQuery.Uri 将重置 EventQuery 状态
本文关键字:EventQuery 状态 Uri 设置 | 更新日期: 2023-09-27 18:35:45
这有效:
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
是外行的。
这对我来说毫无意义。怎么可能?
对象初始值设定项只是设置属性。在另一个属性之前设置一个属性的任何副作用都将可见,就像您将其写出来一样:
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;
在这种情况下,我怀疑通过设置 StartTime
/EndTime
添加了某些内部状态,但通过设置 Uri
重置。
编辑:好的,我现在已经找到了相关的代码。
EventQuery
源于FeedQuery
。ParseUri
FeedQuery
调用上设置Uri
,进而设置所有内部属性。
基本上,当你有相互关联的属性时,这种事情总是会发生。假设你有一个类型的Size
属性,它反映了宽度和高度,也可以独立设置——你可以写:
var foo = new Foo {
Width = 100,
Size = new Size(200, 50),
Height = 20
};
最终尺寸为 200x20。基本上,当您了解Uri
是表示完整查询 URI 而不仅仅是词干的属性时,这一切都是有意义的。
令人惊讶的是,在Stack Overflow上提问的行为如何帮助您了解正在发生的事情。 我把这个问题留在这里,以便其他遇到这个问题的人都知道发生了什么......我不能是唯一一个会遇到这个问题的人。
在 Google 日历 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。