您好我正在使用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代码。
我已经谷歌等搜索答案,我尝试过的所有内容都会引发不同的错误。认为我的大脑正在融化,现在有人能指出我正确的方向吗?感谢
答案 0 :(得分:2)
cc.Read(Of t)
要求t
拥有默认构造函数,但您无法确保。将约束添加到方法声明:
Private Function GetCsvData(Of t As {Class, New})(fName As String) As IEnumerable(Of t)