类类型作为vb.net中的函数参数

时间:2014-08-18 11:14:58

标签: vb.net

您好我正在使用LinqToCsv将来自不同文件的一些数据加载到某些变量中。

我目前有3个不同的文件,我正在使用类来轻松导入这些文件,但我想让代码更通用,而且在传递类型作为参数时我很挣扎。

我使用的代码类似于以下内容:

    Public Class Csv1
        Property AField1 As String
        Property AField2 As String
    End Class

    Public Class Csv2
        Property BField1 As String
        Property BField2 As String
    End Class

    Public Class Csv3
        Property CField1 As String
        Property CField2 As String
    End Class

    Public Module CsvTools
        Private Function GetCsvData(Of t)(fName As String) As IEnumerable(Of t)
            If IO.File.Exists(fName) Then
                Dim cf = New CsvFileDescription With {
                    .SeparatorChar = ",",
                    .FirstLineHasColumnNames = True,
                    .IgnoreUnknownColumns = True
                }
                Dim cc = New CsvContext()
                Return cc.Read(Of t)(fName, cf)
                'This line above gives the compile error:
                ' Type parameter 't' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New'
                ' constraint for type parameter 'T'
            End If
        End Function

        Property File1 As IEnumerable(Of Csv1)
        Property File2 As IEnumerable(Of Csv2)
        Property File3 As IEnumerable(Of Csv3)

        Public Sub LoadData()
            File1 = GetCsvData(Of Csv1)("File1.csv")
            File2 = GetCsvData(Of Csv2)("File2.csv")
            File3 = GetCsvData(Of Csv3)("File3.csv")
        End Sub

    End Module

任何人都想指出我做错了什么?我不想为我想要导入的每种不同类型的文件复制GetCsvData代码。

我已经谷歌等搜索答案,我尝试过的所有内容都会引发不同的错误。认为我的大脑正在融化,现在有人能指出我正确的方向吗?感谢

1 个答案:

答案 0 :(得分:2)

cc.Read(Of t)要求t拥有默认构造函数,但您无法确保。将约束添加到方法声明:

Private Function GetCsvData(Of t As {Class, New})(fName As String) As IEnumerable(Of t)