如何在VB.NET中向IEnumerable(Of T)添加项?

时间:2009-09-11 06:21:35

标签: vb.net

我在C#中看到了一些关于向IEnumerable中添加项目的问题,但是当我尝试在VB.NET中实现提议的解决方案时,我遇到了问题。

Option Strict On
Dim customers as IEnumerable(Of Customer)
' Return customers from a LINQ query (not shown)
customers = customers.Concat(New Customer with {.Name = "John Smith"})

上面的代码给出了错误:

  

Option Strict On禁止从Customer到IEnumerable(Of Customer)的隐式转换

VS2008然后建议使用CType,但这会导致运行时崩溃。我错过了什么?

2 个答案:

答案 0 :(得分:5)

一种选择是编写一个连接单个元素的扩展方法

<Extension()> _
Public Function ConcatSingle(Of T)(ByVal e as IEnumerable(Of T), ByVal elem as T) As IEnumerable(Of T)
  Dim arr As T() = new T() { elem }
  Return e.Concat(arr)
End Function

...

customers = customers.ConcatSingle(New Customer with {.Name = "John Smith"})

答案 1 :(得分:4)

你不能Concat一个带序列的元素 - 基本上你Concat两个序列在​​一起。

您有三种选择:

  • 从单个元素(例如单元素数组)构建序列
  • 编写一个库方法来做你想要的(在VB9中可能很棘手,没有迭代器块)
  • 使用已MoreLinq
  • has this functionality

使用MoreLinq选项,您可以调用以下任一项:

item.Concat(sequence)
sequence.Prepend(item)

首先产生单个项目,或

sequence.Concat(item)

最后生成单个项目。

(回头看,我不确定我喜欢item.Concat版本;它过于广泛地添加了扩展方法。我们可能会删除它。)