【问题标题】:String.Contains not working as expectedString.Contains 未按预期工作
【发布时间】:2013-08-01 01:46:33
【问题描述】:

我有 54,000 个文件,每个文件的命名方法略有不同,我需要检查文件名是否包含特定字符串。但是,我找不到让 Select 语句正常工作的方法。

我的代码意外失败。请谁能告诉我为什么在“BARITONE”中找不到字符串“BAR”?


Dim tempCheck as string = "1st BARITONE"
Dim GoodOne as Boolean = False
Select Case tempCheck
    Case tempCheck.Contains("CORN")
        GoodOne = True
    Case tempCheck.Contains("HORN")
        GoodOne = True
    Case tempCheck.Contains("BAR")
        GoodOne = True
    Case tempCheck.Contains("TROM")
        GoodOne = True
    Case tempCheck.Contains("EUP")
        GoodOne = True
    Case Else
        GoodOne = False
End Select

【问题讨论】:

  • 请不要那样做!定义可接受字符串的通用列表,然后循环遍历它,一旦找到匹配值,将标志设置为 true 并退出循环。这样,如果添加了值,您就不需要添加代码行。如果值不是硬编码而是在一些配置文件中,那就更好了!
  • @Bartdude 使用 Linq 更容易:things.Any(i => stuff.Contains(i))(C#,但仍然如此)。
  • @GrantThomas :不幸的是,我无法在我当前的任何项目中使用 Linq,但每次我看到这些行之一时,我都更渴望尝试它。似乎绝对可以节省很多时间!

标签: vb.net string select-case


【解决方案1】:

试试这样:

    Dim tempCheck as string = "1st BARITONE"
    Dim GoodOne as Boolean = False
    Select Case True
        Case tempCheck.Contains("CORN")
            GoodOne = True
        Case tempCheck.Contains("HORN")
            GoodOne = True
        Case tempCheck.Contains("BAR")
            GoodOne = True
        Case tempCheck.Contains("TROM")
            GoodOne = True
        Case tempCheck.Contains("EUP")
            GoodOne = True
        Case Else
            GoodOne = False
    End Select

SELECT CASE 不适用于这样的字符串(您必须将字符串与字符串进行比较,在这种情况下您将与布尔值进行比较)。与布尔值相比,它确实适用于布尔值

【讨论】:

  • 与一系列If 语句相比,这有什么优势?
  • @CodyGray 无;但至少这个有效。我个人认为用例声明没有任何特殊原因。
  • @CodyGray 不多,保持 OP 原结构
  • +1 用于提供完美满足 OP 期望的解决方案(甚至是选择案例结构)。
  • 我不相信!谢谢尤里。
【解决方案2】:

您使用 Select Case 错误。只需使用简单的 if else:

Dim tempCheck As String = "1st BARITONE"
Dim GoodOne As Boolean = False
If tempCheck.Contains("CORN") Then
    GoodOne = True
ElseIf tempCheck.Contains("HORN") Then
    GoodOne = True
ElseIf tempCheck.Contains("BAR") Then
    GoodOne = True
ElseIf tempCheck.Contains("TROM") Then
    GoodOne = True
ElseIf tempCheck.Contains("EUP") Then
    GoodOne = True
End If

【讨论】:

  • 它可以在 VB.NET 中工作(即使它不是最佳实践):Select Case True Case tempCheck.Contains("CORN")
  • @TimSchmelter 我想(另一个答案证明了这一点),但老实说,你正在弯曲 Select Case 以获得它当时并不真正适用的东西。我更喜欢我的答案。
  • 我认为使用 If...ElseIf 没有任何优势。但我更喜欢 Select Case - 大多数时候:)
猜你喜欢
  • 2021-06-04
  • 2022-01-24
  • 2015-05-11
  • 2020-05-15
  • 2014-10-31
  • 2018-02-12
  • 2014-01-20
  • 2015-01-13
  • 2019-04-13
相关资源
最近更新 更多