案例陈述问题 - vb.net

时间:2010-10-06 13:23:39

标签: vb.net select case

所以我在这里将案例陈述组合在一起,但我有一些案例陈述需要在原案件确认后根据第二个变量作出额外决定。

这就是我现在所拥有的:

Case "PRIVATE_PARTY"
    If Condition = KBB_CONDITION_EXCELLENT Then
        Vehicle.MarketValue = Response.PrivatePartyExcellent
    ElseIf Condition = KBB_CONDITION_GOOD Then
        Vehicle.MarketValue = Response.PrivatePartyGood
    Else
        Vehicle.MarketValue = Response.PrivatePartyFair
    End If

是否可以在某些情况下添加“and”语句并使代码以相同的方式工作?

Case "TRADE_IN" And Condition = KBB_CONDITION_EXCELLENT
    Vehicle.MarketValue = Response.TradeInExcellent

然后只有3个案例陈述而不是一个,但代码看起来并不丑陋。顺便说一下,条件是相同的选择。

  1. 这会有用吗?
  2. 如果有效,我有什么理由不使用它吗?

3 个答案:

答案 0 :(得分:3)

简答

代码可能会编译,但它会错误。不要试图像这样使用Select Case!我在下面解释原因。


长答案

VB.NET中的

Select Case基本上是一个美化的If / ElseIf /等。 (在语义上与switch相同)。因此,尝试以这种方式编写代码实际上与使用IfElseIf等编写等效代码没有任何实际好处。

也就是说,下面的代码使用VB 9编译Option Strict OffOption Infer On

注意:我说这只会因为编译而“正常工作”。我在这里制作的过程就是因为代码编译,这并不意味着它符合你的期望。再次:这个编译,但它不起作用。不要使用它。 *

Select Case s
    Case "Private Party" AndAlso i = 1
        Console.WriteLine(1)
    Case "Trade In" AndAlso i = 2
        Console.WriteLine(2)
End Select

问题是:它将编译为是什么?

破解Reflector中的代码,这是你看到的:

Dim VB$t_string$L0 As String = s
If (VB$t_string$L0 = Conversions.ToString((Conversions.ToBoolean("Private Party") AndAlso (i = 1)))) Then
    Console.WriteLine(1)
ElseIf (VB$t_string$L0 = Conversions.ToString((Conversions.ToBoolean("Trade In") AndAlso (i = 2)))) Then
    Console.WriteLine(2)
End If

因此,VB编译器将"Private Party" AndAlso i = 1解释为Boolean,然后将其转换为String(“True”或“False”),以便将其与s进行比较{1}}。

换句话说,这不会像你想要的那样工作。老实说,我只是去If / ElseIf区块;它会更容易阅读(在我看来)。

*你可能已经明白了我的观点;我只想让它100%清晰;)

答案 1 :(得分:1)

我认为你只能对一个变量有条件。 你可以在select case中添加一个select case,但我怀疑你能做得更好。

http://msdn.microsoft.com/en-gb/library/cy37t14y%28v=VS.80%29.aspx

答案 2 :(得分:1)

  1. 没有那种确切的语法,没有
  2. 见1.: - )
  3. 这里可以使用的一种技术是利用VB.NET允许C#不具备的东西 - 即非常量Case条件(我已经猜到了变量{{ 1}}):

    Seller

    Select Case True Case Seller = "TRADE_IN" And Condition = KBB_CONDITION_EXCELLENT Vehicle.MarketValue = Response.TradeInExcellent Case Seller = "PRIVATE_PARTY" Condition = KBB_CONDITION_EXCELLENT Vehicle.MarketValue = Response.PrivatePartyExcellent ' etc End Select 将按顺序进行评估,直到Case为止。


    然而!如果所有这些True正在做的是从卖家和条件的组合映射到Select Case,我建议更好的方法来完成整个操作是(只需一次)设置嵌套{ {1}}包含映射数据,然后在需要Response时查找其中的值。如果你有兴趣,我可以扩展这个......