馬克斯(靈感來自Javascript角可變參數)/ MIN()和函數式語言列表解析參數數組通用的毗連擴展方法我嘗試使用通用擴展方法來獲得同樣的在VB.NET給定IEnumerable(T)作爲resulttype。除了字符串,這很好。爲什麼? 這些擴展方法可能被認爲是一個壞主意。任何有力的理由爲什麼這是一個壞主意。不工作的IEnumerable(字符串)
Option Explicit On
Option Strict On
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim xs As IEnumerable(Of Integer) = 1.Concat(2, 3, 4)
Dim ys As IEnumerable(Of Double) = 1.0.Concat(2.0, 3.0, 4.0)
Dim zs As IEnumerable(Of String) = Concat("1", "2", "3", "4") 'silly but works, I would use a stringbuilder
'Dim zs2 As IEnumerable(Of String) = "1".Concat("2", "3", "4") ' does not work why?
'Gives:
'String' cannot be converted to 'System.Collections.Generic.IEnumerable(Of String)'
'because() 'Char' is not derived from 'String', as required for the 'Out' generic parameter 'T' in 'Interface IEnumerable(Of Out T)'.
'C:\Users\kruse\Documents\Visual Studio 10\Projects\VarArgsExperiment\VarArgsExperiment\Module1.vb 12 45 VarArgsExperiment
Console.ReadLine()
End Sub
<Extension()> _
Function Concat(Of T)(ByVal xs As IEnumerable(Of T), ByVal ParamArray params As T()) As IEnumerable(Of T)
Dim ys As IEnumerable(Of T) = params.AsEnumerable()
Return xs.Concat(ys)
End Function
<Extension()> _
Function Concat(Of T)(ByVal x As T, ByVal ParamArray params As T()) As IEnumerable(Of T)
Dim xs As New List(Of T)
xs.Add(x)
Dim ys As IEnumerable(Of T) = params.AsEnumerable
Return xs.Concat(ys)
End Function
End Module
...模塊的其餘部分被剪短以便簡短。 Als爲Add,Cast和Apply for Action對象編寫了一些方法。
你真的需要調用'params.AsEnumerable()',因爲它已經是'T()'類型了嗎? – 2009-10-17 11:43:43