我试图将microsoft access数据库中的表中的列名放在列表变量中。到目前为止,我已经完成了这项工作,但是我试图将其添加到topic变量的行不起作用,并且会出现错误
未定义或导入预定义类型“valuetuple(of,,”)。
代码是:

Dim topic = topic()
Dim filtervalues = {Nothing, Nothing, "Results", Nothing}
Dim counter As Integer = 0
Using con = _
    New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb")
    Dim columns = con.GetSchema("columns", filtervalues)

    For Each row As DataRow In columns.Rows
        topic(counter) = ("{0,-20}{1}", row("column_name"), row("data_type"))
        counter = +1
    Next
End Using

最佳答案

根据Value Tupels上的文档,如果使用的是4.7之前的框架版本,则必须获取nuget package system.valuetuple:
重要的
元组支持需要valuetuple类型。如果未安装.NET Framework 4.7,则必须添加NuGet程序包System.ValueTuple,该程序包位于NuGet库中。如果没有此包,则可能会出现类似于“未定义或导入预定义类型”“valuetuple(of,,”)的编译错误。”
在Visual Studio 2017中,右键单击解决方案并选择“管理解决方案的NuGet包…”。在搜索框中输入“valuetuple”。选择“system.valuetuple”,右键单击要安装包的项目的复选框,然后单击“安装”。
见:NuGet Package Manager UI
此外,还必须将list变量声明为

Dim topic = New List(Of (String, String, String))

并添加新元素
topic.Add(("{0,-20}{1}", row("column_name"), row("data_type")))

不再需要柜台了。
或者,可以使用字符串列表并使用字符串插值来格式化字符串
Dim topic = New List(Of String)
Dim filtervalues = {Nothing, Nothing, "Results", Nothing}
Using con =
    New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb")
    Dim columns = con.GetSchema("columns", filtervalues)

    For Each row As DataRow In columns.Rows
        topic.Add($"{row("column_name"),-20}{row("data_type")}")
    Next
End Using

10-06 14:04