旨在实现:
我希望函数接受List(Of String),Array&字符串和类似的返回List(Of String),Array&字符串分别。函数只是将一个字符串(月)添加到输入集合。我只想将它用于字符串,数组和列表,需要考虑转换。
我有一个简单的功能:
Private Function addMonth(ByVal stringList As List(Of String), ByVal month As String) As List(Of String)
Dim names As New List(Of String)
For Each name In stringList
names.Add(name + " (" + month + ")")
Next name
Return names
End Function
如何使用通用类型'T'来实现我的目标?
这真的会让我感到很紧张..!
我是VB.Net的新手..并且对通用函数了解不多!
答案 0 :(得分:3)
您甚至不需要为此编写新功能。只需使用.Select()
:
myStringList.Select(Function(s) s & " (" & month & ")")
但是既然你也想接受字符串输入,你可以像这样重载函数:
Private Function AddMonth(ByVal list As IEnumerable(Of String), ByVal month As String) As IEnumerable(Of String)
return list.Select(Function(s) s & " (" & month & ")")
End Function
Private Function AddMonth(ByVal list As String, ByVal month As String) As IEnumerable(Of String)
Return New String() {list & " (" & month & ")"}
End Function
请注意,所有这些都返回IEnumerable(Of String)
,这应该是正确的。稍后将其转换为字符串数组或字符串列表很容易,但大多数时候您不想这样做。对于性能来说,尽可能长时间地将对象作为IEnumerable进行处理会更好。
答案 1 :(得分:1)
更新:如果你想要的是一个可以 String
或 String()
的功能数组,您可以使用ParamArray
关键字完成此操作。但它需要是传递给函数的 last 参数;所以你只需要颠倒参数的顺序:
Private Function AddMonth(ByVal month As String, ByVal ParamArray list() As String) As List(Of String)
' Same code as below
End Function
这可以让你像这样调用它:
Dim withMonths = AddMonth("March", "Report")
也是这样:
Dim withMonths = AddMonth("March", "Report", "Memo")
也是这样:
Dim list = New String() { "Report", "Memo" }
Dim withMonths = AddMonth("March", list)
请注意,虽然这看起来可以实现您所追求的目标,但它实际上有点少灵活,因为它要求您以上面的形式(每个单独)或实际传递参数String()
数组,而不仅仅是IEnumerable(Of String)
等任何List(Of String)
。
原始回答:
Private Function AddMonth(Of T)(ByVal list As IEnumerable(Of T), ByVal month As String) As List(Of String)
Dim names As New List(Of String)
For Each name In list
' Using String.Concat avoids the possibility
' of a NullReferenceException
names.Add(String.Concat(name) + " (" + month + ")")
Next name
Return names
End Function