通过使用带变量的对象初始值设定项来声明对象
Declare an Object by Using an Object Initializer with variables
我目前正在研究 VB.NET、.NET 4.7.2 版和 Visual Studio 2019(windows 表格)。如果这是天真的错误,我对 COM 语言还很陌生。我正在尝试使用变量声明具有对象初始值设定项(等效)的对象。我想用变量来做的原因是因为这些属性存储在一个文本文件中。所以我从文件中读取那些作为键/值对(字典),然后将其分配给要用于初始化对象的变量。但是,如果给我以下错误
这就是我从字典中分配变量的方式。
Dim Servername = MyKeyValues.Item("servername")
Dim usr = MyKeyValues.Item("username")
Dim pwd = MyKeyValues.Item("password")
我在终端上输出值,它也以正确的大小写正确地吐出它(因为我也尝试 trim 以防任何前导尾随空格)。但是当我尝试用它来初始化一个对象时,我得到了底部提到的错误。
Dim objServer As New DSSDataSource
objServer.Name = Trim(Servername) ' Servername.Text
objServer.Type = EnumDSSDataSourceType.DssDataSourceTypeServer
objServer.Location = Trim(Servername) 'Servername.Text
objServer.Mode = EnumDSSConnectionMode.DssConnectionModeServerAccess
objServer.AuthMode = EnumDSSAuthModes.DssAuthStandard
objServer.login = Trim(usr) 'Login.Text
objServer.Passwd = Trim(pwd) ' Pwd.Text
objServer.Init()
然而,当我只是简单地硬编码相同的值时,对象初始化就很好。
Dim objServer As New DSSDataSource
objServer.Name = "localhost" ' Servername.Text
objServer.Type = EnumDSSDataSourceType.DssDataSourceTypeServer
objServer.Location = "localhost" 'Servername.Text
objServer.Mode = EnumDSSConnectionMode.DssConnectionModeServerAccess
objServer.AuthMode = EnumDSSAuthModes.DssAuthStandard
objServer.login = "test.usr" 'Login.Text
objServer.Passwd = "xxx" ' Pwd.Text
objServer.Init()
所以我不确定我哪里错了。
正如 CaiusJard 和 jmcilhinney 所说,确实是字符串不匹配。这可能是由于隐藏字符,因为当我使用 ReadAll 读取文件时,它似乎也捕获了回车 return.
我注意到 MessageBox.Show(Servername.Length)
和 MessageBox.Show("localhost".Length)
的长度不同。我最终不得不替换不可见的字符,以便两者匹配。它现在工作正常。谢谢两位指点。
Dim Servername = MyKeyValues.Item("servername").Replace(Chr(13), "")
我目前正在研究 VB.NET、.NET 4.7.2 版和 Visual Studio 2019(windows 表格)。如果这是天真的错误,我对 COM 语言还很陌生。我正在尝试使用变量声明具有对象初始值设定项(等效)的对象。我想用变量来做的原因是因为这些属性存储在一个文本文件中。所以我从文件中读取那些作为键/值对(字典),然后将其分配给要用于初始化对象的变量。但是,如果给我以下错误
这就是我从字典中分配变量的方式。
Dim Servername = MyKeyValues.Item("servername")
Dim usr = MyKeyValues.Item("username")
Dim pwd = MyKeyValues.Item("password")
我在终端上输出值,它也以正确的大小写正确地吐出它(因为我也尝试 trim 以防任何前导尾随空格)。但是当我尝试用它来初始化一个对象时,我得到了底部提到的错误。
Dim objServer As New DSSDataSource
objServer.Name = Trim(Servername) ' Servername.Text
objServer.Type = EnumDSSDataSourceType.DssDataSourceTypeServer
objServer.Location = Trim(Servername) 'Servername.Text
objServer.Mode = EnumDSSConnectionMode.DssConnectionModeServerAccess
objServer.AuthMode = EnumDSSAuthModes.DssAuthStandard
objServer.login = Trim(usr) 'Login.Text
objServer.Passwd = Trim(pwd) ' Pwd.Text
objServer.Init()
然而,当我只是简单地硬编码相同的值时,对象初始化就很好。
Dim objServer As New DSSDataSource
objServer.Name = "localhost" ' Servername.Text
objServer.Type = EnumDSSDataSourceType.DssDataSourceTypeServer
objServer.Location = "localhost" 'Servername.Text
objServer.Mode = EnumDSSConnectionMode.DssConnectionModeServerAccess
objServer.AuthMode = EnumDSSAuthModes.DssAuthStandard
objServer.login = "test.usr" 'Login.Text
objServer.Passwd = "xxx" ' Pwd.Text
objServer.Init()
所以我不确定我哪里错了。
正如 CaiusJard 和 jmcilhinney 所说,确实是字符串不匹配。这可能是由于隐藏字符,因为当我使用 ReadAll 读取文件时,它似乎也捕获了回车 return.
我注意到 MessageBox.Show(Servername.Length)
和 MessageBox.Show("localhost".Length)
的长度不同。我最终不得不替换不可见的字符,以便两者匹配。它现在工作正常。谢谢两位指点。
Dim Servername = MyKeyValues.Item("servername").Replace(Chr(13), "")