我正在从交换服务器读取连续的电子邮件并处理其附件。我看到了相同的各种示例,但仍然出现错误
You must load or assign this property before you can read its value
我的代码如下
ItemView itemView = new ItemView(NoEmailProcess);
itemView.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
FindItemsResults<Item> searchResults = service.FindItems(folder.Id, itemView);
foreach (var item in searchResults)
{
if (item is EmailMessage)
{
item.Load();
try
{
// Process my email
}
catch
{
// error
}
}
}
要注意的是,我每次都不会收到此错误。我得到了10%的机会,并且从未在调试过程中得到
我想知道应该在“加载”之前使用“绑定”吗?
EmailMessage.Bind
不确定是什么问题。有人可以帮忙我应该调查的领域吗?
答案 0 :(得分:0)
如果尝试读取Item
中不存在的属性,则会引发异常消息“ 必须先加载或分配此属性,然后才能读取其值”。
Item
contain only some properties返回的service.FindItems
。尽管为ItemSchema.HasAttachments
返回了属性Item
,但缺少属性ItemSchema.Attachments
。因此,您只能检查Item
上是否存在附件。但是尝试立即阅读它们将抛出显示的异常。
在读取属性ItemSchema.Attachments
之前,需要先加载它,然后可以通过ItemSchema.Bind
或ItemSchema.Load
进行加载。这两个调用都导致一个GetItem
请求。
由于GetItem
请求也返回了属性ItemSchema.Attachments
(请参阅上面的链接的MS文档),因此可以安全地读取它。