我正在开发一个ASPX VB.NET Web应用程序,它允许您从作业标题列表中进行搜索,当您选择作业标题并单击添加按钮时,它会将作业标题添加到名为tbJobTitle的文本框中。
问题在于,当有一个带有连字符的作业标题时,只有标题的第一部分被传递给tbJobTitle,例如,如果你有一个名为1234--admin assistant - IT admin
的职位名称作为职位名称,那么admin assistant
被发送到tbJobTitle
文本框。我需要将整个内容传递给tbJobTitle
文本框。
这是我的.vb代码:
Private Sub btnAddTitle_Click(sender As Object, e As EventArgs) Handles btnAddTitle.Click
For Each item As ListItem In lbJobTitle.Items
If item.Selected Then
If Not lbTitles.Items.Contains(item) Then
lbTitles.Items.Add(item)
Dim str As String = lbTitles.SelectedItem.Text
Dim strArr As String() = Nothing
Dim splitchar As Char() = {"--"}
strArr = str.Split(splitchar)
tbJobTitle.Text = strArr(2)
End If
End If
End Sub
答案 0 :(得分:1)
这是因为microsoft决定将option strict设置为off
作为默认值。因此,每个新开发人员都会遇到如此丑陋的错误。通常这会产生编译器错误。为什么呢?
因为这无效:
Dim splitchar As Char() = {"--"}
您正在使用单个Char()
初始化String
。有效的是这个(注意"-"c
):
Dim splitchar As Char() = {"-"c} ' this will split by a single hyphen
现在,如果Option Strict设置为Off会发生什么?它会编译并引入一个更糟糕的bug。它将默默地获取字符串的第一个字符并使用它。所以你实际得到这个数组:
Dim splitchar As Char() = {"-"c} ' this will split by a single hyphen
这不是你想要的。这就是你想要的(注意String()
):
Dim splitStrings As String() = {"--"} ' this will split by double hyphen
strArr = str.Split(splitStrings, StringSplitOptions.None))
您需要the overload of String.Split
String()
和StringSplitOptions
。
我强烈建议您将Option Strict
设置为On
并学习编写类型安全且干净的代码。
这是一个演示整个混乱的课程:
Option Strict Off
Public Class OptionStrictDemo
Shared sub ShowMess()
Dim aChar As Char = "f"c
Dim otherChar As Char = "foo"
Dim isMess = aChar = otherChar
Console.Write("Is it a mess? " & if(isMess, "yes", "no")) ' Is it a mess? yes
End sub
End Class
如果您设置Option Strict On
(更好地将其设置为默认值),您将收到编译器错误。