使用CASE [String]时SELECT CASE语句的奇怪行为

时间:2015-02-27 02:39:35

标签: .net vb.net

[更新真实代码所以问题是可以重复的] 我有以下声明:

<Test()>
Public Sub SelectCaseTest()
    Dim foo As String = "AccrualAmount"
    Dim result As Boolean = False

    Select Case foo
        Case "AccrualAmount"
            result = True
    End Select
    Assert.IsTrue(result)
End Sub

得到了这个:

  Expected: True
  But was:  False
   at NUnit.Framework.Assert.That(Object actual, IResolveConstraint expression, String message, Object[] args)
   at NUnit.Framework.Assert.IsTrue(Boolean condition)

看起来非常简单明了。出于某种原因,它不会进入选择案例。如果我在调试器中使用该问题情况执行foo.Equals(“AccrualAmount”),则返回true。当VB.NET评估“case”AccrualAmount“”语句时,会发生什么?为什么它不同意.Equals评估的结果?

2 个答案:

答案 0 :(得分:1)

您的代码必须有其他内容,这里没有显示。我假设此Select...Case语句位于FunctionSub内?因为这有效:

.aspx页面:

<p runat="server" id="poutput"></p>

.aspx.vb代码隐藏:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim foo As String = example()
        poutput.InnerText = foo
    End If
End Sub

Protected Function example() As String
    Dim SomeVar As String
    SomeVar = "hello"
    Select Case SomeVar
        Case "hello"
            Return "got it"
    End Select
    Return "no match"
End Function

您可以展示更多信息来帮助我们重现您的错误吗?

答案 1 :(得分:0)

在检查完所有“选项比较”设置后,尝试以不同的方式重写它等等。我不得不在某处复制单元测试,所以我暂时把它放到Notepad ++中。看到了这个:

enter image description here

神圣的废话,简直不敢相信我的运气!在“案例”陈述结束时爱美国的象征。这里要学到的教训就是如果你看到像这样奇怪的东西,就把你的代码从VS贴到Notepad ++上。现在它是有道理的。有人必须从某个地方复制/粘贴案例值。看起来美国是十六进制值F1。现在我只需要确定复制/粘贴的位置,这样就不会再发生了。