2009-09-11 87 views
1

我看到了一些以前回答的關於在C#中向IEnumerable添加項目的問題,但是我在嘗試在VB.NET中實現建議的解決方案時遇到困難。如何在VB.NET中添加項目到IEnumerable(Of T)?

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 disallows implicit conversions from Customer to IEnumerable(Of Customer)

VS2008建議使用CTYPE,但導致運行時墜毀我。我錯過了什麼?

回答

4

你不能Concat一個單一的元素與一個序列 - 你Concat兩個序列在​​一起,基本上。

你有三個選擇:

  • 建立從您的單個元素的序列(例如單元素數組)
  • 寫庫的方法做你想做的(可能在VB9,會非常棘手,這沒有迭代器塊)
  • 使用MoreLinq,已經has this functionality

隨着MoreLinq選項,你可以調用的:

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

先得到單個項目,或

sequence.Concat(item) 

到最後得到單個項目。

(回想起來,我不知道我喜歡item.Concat版本;它增加了擴展方法過於廣泛,我們可以將其刪除。)

+0

很好的答案。我也懷疑item.Concat,特別是Prepend做同樣的事情。如果我是你,我會刪除它;-) – 2009-09-11 12:59:33

+0

我想我們會的,是的。 – 2009-09-11 13:28:36

5

一種選擇是寫一個concats一個擴展方法單個元素

<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"}) 
相關問題