问题:
我目前在C#中有以下代码行:
if ((oAEAuthInfo.GetInfo("LetterTo_name") == (oAEAuthInfo.GetInfo("firstname") + " " + oAEAuthInfo.GetInfo("lastname"))) && (oAEAuthInfo.GetInfo("Name")).Contains("OMEGA") || (oAEAuthInfo.GetInfo("Name")).Contains("Alpha"))
Run Code Online (Sandbox Code Playgroud)
它显示我想要的正确.
但是,当我尝试在VB中做同样的事情时:
IF ((oAEAuthInfo.GetInfo("LetterTo_name") = (oAEAuthInfo.GetInfo("firstname") + " " + oAEAuthInfo.GetInfo("lastname"))) And ((oAEAuthInfo.GetInfo("Name")).Contains("Omega") Or (oAEAuthInfo.GetInfo("Name")).Contains("Alpha"))) THEN
Run Code Online (Sandbox Code Playgroud)
它没有显示任何结果.这意味着当我运行我的C#版本的代码时,它会显示一个图像但是对于VB版本,没有任何反应.
我究竟做错了什么?
UPDATE
大家好.我想感谢大家的帮助,并帮助我更好地理解VB.但是,它仍然没有显示任何图像,我不知道为什么.
以下是我正在做的事情.出于某种原因,当我尝试分配变量时,它也没有显示任何结果.任何帮助,将不胜感激.
<table width="100%" CELLSPACING="0" CELLPADDING="0">
<tr>
<td align="center">
<%
IF ((oAEAuthInfo.GetInfo("LetterTo_name") = (oAEAuthInfo.GetInfo("firstname") & " " & oAEAuthInfo.GetInfo("lastname"))) AndAlso ((oAEAuthInfo.GetInfo("Name")).Contains("OMEGA") OrElse (oAEAuthInfo.GetInfo("Name")).Contains("ALPHA"))) THEN
select (oAEAuthInfo.GetInfo("Site"))
case "R107":
case "R0712":
case "R108":
case "R10812":
case "R113":
case "R11312":
case "R115":
case "R11512":
case "R10702":
case "R10802":
case "R11302":
case "R11502":
case "RG112":
Response.Write("<img src='/images/logos/COLA-m.jpg'>")
case "RG109":
case "RG10912":
case "RG110":
case "RG11012":
case "RG10902":
case "RG11002":
Response.Write("<img src='/images/logos/regalcodow-m.jpg'>")
End select
ELSEIF (oAEAuthInfo.GetInfo("Name") = (oAEAuthInfo.GetInfo("firstname") & " " & oAEAuthInfo.GetInfo("lastname"))) THEN
case "RG112":
case "RG11212":
case "RG11202":
Response.Write("<img src='/images/logos/RegalBG-m.jpg'>")
case "RMG117":
case "RMG11712":
case "RMG11702":
Response.Write("<img src='/images/logos/RegalGle-m.jpg'>")
case "MG101":
case "MG10112":
case "MG102":
case "G10212":
case "G116":
case "G11612":
case "118":
case "11812":
case "10102":
case "G10202":
case "G11602":
case "G11802":
Response.Write("<img src='/images/logos/RegalSFV-m.jpg'>")
End select
Else
IF((oAEAuthInfo.GetInfo("Facility") <> (oAEAuthInfo.GetInfo("firstname") & " " & oAEAuthInfo.GetInfo("lastname"))) OrElse (oAEAuthInfo.GetInfo("_ReferredTo") <> (oAEAuthInfo.GetInfo("firstname") & " " & oAEAuthInfo.GetInfo("lastname"))) OrElse (oAEAuthInfo.GetInfo("ReferredFrom") <> (oAEAuthInfo.GetInfo("firstname") & " " & oAEAuthInfo.GetInfo("lastname"))) OrElse (oAEAuthInfo.GetInfo("pcpname") <> (oAEAuthInfo.GetInfo("firstname") & " " & oAEAuthInfo.GetInfo("lastname")))) THEN
select (oAEAuthInfo.GetInfo("PatientSite"))
case "MG112":
case "MG11212":
case "MG11202":
Response.Write("<img src='/images/logos/RegalBG.bmp'>")
case "MG117":
case "MG11712":
case "MG11702":
Response.Write("<img src='/images/logos/RegalGle.bmp'>")
case "MG101":
case "MG10112":
case "MG102":
case "MG10212":
case "RG116":
case "MG11612":
case "MG118":
case "MG11812":
case "MG10102":
case "MG10202":
case "MG11602":
case "MG11802":
Response.Write("<img src='/images/logos/RegalSFV.bmp'>")
End select
End If
End If
%>
</td>
</tr>
</table>Run Code Online (Sandbox Code Playgroud)
在这种情况下,一个好的调试策略是在if语句之外进行评估,并使用调试器逐步执行并确保正确计算值.
C#
var letterToName = oAEAuthInfo.GetInfo("LetterTo_name");
var fullName = oAEAuthInfo.GetInfo("firstname") + " " + oAEAuthInfo.GetInfo("lastname");
var containsOmega = oAEAuthInfo.GetInfo("Name").Contains("OMEGA");
var containsAlpha = oAEAuthInfo.GetInfo("Name").Contains("Alpha");
if ((letterToName == fullName) && containsOmega || containsAlpha)
Run Code Online (Sandbox Code Playgroud)
VB
dim letterToName = oAEAuthInfo.GetInfo("LetterTo_name")
dim fullName = oAEAuthInfo.GetInfo("firstname") + " " + oAEAuthInfo.GetInfo("lastname")
dim containsOmega = oAEAuthInfo.GetInfo("Name").Contains("Omega")
dim containsAlpha = oAEAuthInfo.GetInfo("Name").Contains("Alpha")
IF ((letterToName = fullName) And (containsOmega Or containsAlpha)) THEN
Run Code Online (Sandbox Code Playgroud)
并且很清楚你的问题是什么:你在VB代码中有一组额外的括号,它们是C#代码中缺少的.操作顺序规定and运算符优先于or运算符,因此在C#代码中如果containsAlpha为真则条件总是通过,而在VB代码中,只有在运行时才会发生letterToName = fullName.
此外,"Omega"可能是区分大小写的问题.
作为视觉文森特指出的那样,And和Or运营商实际上并不对应于C#的行为&&和||运营商-而不是VB的运营商对等同会AndAlso和OrElse.除非GetInfo或Contains有一些副作用,否则在这种情况下不太可能成为问题的根源.