.net - 如何在 VB.NET 中使用泛型?

标签 .net vb.net generics

我有以下代码:

Public Shared Function GetListAsString(ByVal data As List(Of String)) As String
    Dim retVal As String = "| "
    For Each obj As String In data
        retVal = retVal + obj.ToString() + " |"
    Next
    Return retVal
End Function

它将列表转换为可打印的字符串。现在它被设置为只使用列表。我觉得它应该能够与任何类型的集合一起使用。我是集合和泛型的新手。当我尝试做类似的事情时
Public Shared Function GetListAsString(ByVal data As Collection(T)) As String
    Dim retVal As String = "| "
    For Each obj As String In data.ToString()
        retVal = retVal + obj.ToString() + " |"
    Next
    Return retVal
End Function

我得到一个错误。谁能指出我正确的方向?

最佳答案

您没有从编译器获得非常有用的错误消息。你忘记了使函数通用,它不能产生一个像样的诊断。让我们关注更大的问题:

    For Each obj As String In data.ToString()
        retVal = retVal + obj.ToString() + " |"
    Next

For 循环被破坏,从 data.ToString() 开始。只用数据。并且数据的元素类型是T,而不是String。此外,由于您只是枚举集合,您可以使用较小的接口(interface) IEnumerable<>,使其适用于更多的集合类型。因此:
Public Shared Function GetCollectionAsString(Of T)(ByVal data As IEnumerable(Of T)) As String
    Dim retVal As String = "| "
    For Each obj As T In data
        retVal = retVal + obj.ToString() + " |"
    Next
    Return retVal
End Function

注意添加的 (Of T)在函数名称之后,那是解决原始错误消息的名称。

关于.net - 如何在 VB.NET 中使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093936/

相关文章:

c# - 序列化具有相同类型名称的多态列表

java ? : operator in vb. 网络

vb.net - MS Access 网络共享缓慢

c# - NReco 错误 : "The specified executable is not a valid application for this OS platform"

c - c中的通用数据结构搜索

java - 在java中使用泛型编写方法时<E>到底做了什么?

c# - 当 .NET 只依赖于参数时,我应该使用委托(delegate)还是方法?

c# - 绑定(bind)到 ListBox 中已排序的 ObservableCollection<T>

.net - 构造 System.Data.SQLite.SQLiteConnection 时导致 System.BadImageFormatException 的原因

c# - 如何查看类型参数的实际运行类型?