【问题标题】:VB.NET Loop Collection And Get ValueVB.NET循环收集并获取价值
【发布时间】:2021-08-14 16:16:21
【问题描述】:
我正在使用 EWS 循环浏览一些附件,但是如果我遇到一封包含多个附件的电子邮件,我只想下载一个特定的附件。
为此,我想我可以测试一下 AttachmentCollection 是否包含特定的附件名称,然后只下载该附件。
如何循环访问 AttachmentCollection 并测试附件的每个名称?
我不能执行 AttachmentCollection.Contains,因为它包含附件集合而不是附件本身的名称。
【问题讨论】:
-
您可以使用.Count 属性并像数组一样循环其中的项目,例如myCollection[i] See the docs。它还有一个迭代器,所以你应该也可以做一个foreach 循环。
标签:
vb.net
exchangewebservices
【解决方案1】:
我并不完全熟悉所涉及的类型,我相信AttachmentCollection 实现了IEnumerable(Of T),这意味着您可以在其上使用一些 LINQ。您可以使用以下方式测试并获取附件:
Dim attachment = myAttachmentCollection.FirstOrDefault(Function(a) a.Name = someValue)
If attachment IsNot Nothing Then
'A match was found and attachment refers to it.
End If
不确定项目类型是什么,所以您可能没有Name 属性,但原理是一样的。
编辑:
为了记录,Contains 的等价物将是 Any:
If myAttachmentCollection.Any(Function(a) a.Name = someValue) Then
如果您只想知道是否存在匹配项,那很好,但如果您也想获得匹配项,则不会首先使用Any,因为这样您将枚举两次。 FirstOrDefault 与 Any 几乎相同,除了如果找到匹配项,则返回匹配项;如果未找到匹配项,则返回 Nothing,而不是在找到匹配项时返回 True,如果未找到匹配项,则返回 False找到了。