所以我在这里将案例陈述组合在一起,但我有一些案例陈述需要在原案件确认后根据第二个变量作出额外决定。
这就是我现在所拥有的:
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个案例陈述而不是一个,但代码看起来并不丑陋。顺便说一下,条件是相同的选择。
答案 0 :(得分:3)
代码可能会编译,但它会错误。不要试图像这样使用Select Case
!我在下面解释原因。
Select Case
基本上是一个美化的If
/ ElseIf
/等。 (不在语义上与switch
相同)。因此,尝试以这种方式编写代码实际上与使用If
,ElseIf
等编写等效代码没有任何实际好处。
也就是说,下面的代码使用VB 9编译Option Strict Off
和Option 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)
这里可以使用的一种技术是利用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
时查找其中的值。如果你有兴趣,我可以扩展这个......