vb.net 内插字符串

Vec*_*tor 2 vb.net string-interpolation

我因为对我的数据库名称进行硬编码而受到了一位拥有多年经验的专业开发人员的惩罚,
好吧,我明白了,我们有时会带着不好的编码习惯,直到我们学会了正确的编码方法,
我终于学会了使用插值字符串(个人认为不漂亮)

我的问题涉及下面发布的两个 Sub,首先运行 GetDB,然后从 GetDB 调用 HowMany
抱歉,我的原因很明显,我认为 NewWord.db 在 GetDB 中声明,并在 HowMany 中工作,没有相同的结构 只是一个疯狂的猜测
注意 NO $或 HowMany 中使用的引用
两个 Sub 都会产生所需的结果

问题是为什么两个语句不需要以相同的方式构建?

    Public Sub HowMany()
    'Dim dbName As String = "NewWord.db"
    Dim conn As New SQLiteConnection("Data Source ='{NewWord.db}';Version=3;")
    tot = dgvOne.RowCount ' - 1
    tbMessage.Text = "DGV has " & tot.ToString & " Rows"
End Sub

Private Sub GetDB()

    Dim str2 As String
    Dim s1 As Integer
    'Dim dbName As String = "NewWord.db"
    Using conn As New SQLiteConnection($"Data Source = '{"NewWord.db"}' ;Version=3;")
        conn.Open()
Run Code Online (Sandbox Code Playgroud)

jmc*_*ney 6

第二种方法是对字符串插值的荒谬且毫无意义的使用。String将文字插入文字可能有什么意义String?重点是您可以插入在运行时确定的值。第二个代码相当于使用:

"Data Source = '" & "NewWord.db" & "' ;Version=3;"
Run Code Online (Sandbox Code Playgroud)

那有什么意义呢?这个想法是,您在运行时从某个地方检索数据库名称,例如您的配置文件,然后将其插入到模板中String,例如

Dim dbName = GetDbNameFromExternalFile()

Using conn As New SQLiteConnection($"Data Source = '{dbName}' ;Version=3;")
Run Code Online (Sandbox Code Playgroud)

现在,用户可以在部署应用程序后编辑该外部文件以更改数据库名称。他们如何更改您代码中的名称?

需要明确的是,字符串插值只是该String.Format方法的本机语言支持。您可以看到,如果您犯了一个错误,就会生成异常,并且该异常将引用该String.Format方法。反过来,String.Format这是一种使将多个值放入长模板的代码比使用多个串联运算符更易于阅读的方法。

大量引号和与号会使代码难以阅读并且容易出错。我已经记不清有多少次人们String因为无法阅读混乱的代码而错过了 a 中的单引号或空格等。就我个人而言,我很少会在同一个表达式中使用两个串联运算符,也不会使用三个。我会这样做:

Dim str = "some text" & someVar
Run Code Online (Sandbox Code Playgroud)

但我很少会这样做:

Dim str = "some text" & someVar & "some more text"
Run Code Online (Sandbox Code Playgroud)

我永远不会这样做:

Dim str = "some text" & someVar & "some more text" & someOtherVar
Run Code Online (Sandbox Code Playgroud)

在字符串插值之前,我会使用String.Format

Dim str = String.Format("some text{0}some more text{1}", someVar, someOtherVar)
Run Code Online (Sandbox Code Playgroud)

现在,我通常会使用字符串插值:

Dim str = $"some text{someVar}some more text{someOtherVar}"
Run Code Online (Sandbox Code Playgroud)

我仍然可以使用String.Format字符串插值的地方是,如果一个值被插入到多个位置和/或文本模板和/或表达式很长,以便我可以将整个内容分解为多行,例如

Dim str = String.Format("some text{0}some more text{1}yet more text{0}",
                        someVar,
                        someOtherVar)
Run Code Online (Sandbox Code Playgroud)