在VB.NET中,And和AndAlso有什么区别?
And
运算符将在继续之前检查语句中的所有条件,而Andalso运算符将在知道条件为false时停止。例如:
if x = 5 And y = 7
检查x是否等于5,检查y是否等于7,如果两者都为true,则继续。
if x = 5 AndAlso y = 7
检查x是否等于5。如果不是,它就不会检查y是否为7,因为它已经知道条件是false了。(这被称为短路。)
一般来说,如果有明确的原因不检查第二部分,如果第一部分不为真,例如如果检查会抛出异常,人们会使用短路方法。例如:
If Not Object Is Nothing AndAlso Object.Load()
如果使用And
而不是AndAlso
,即使它是nothing
,它仍然会尝试Object.Load()
,这将引发异常。
And
运算符评估两端,而AndAlso
仅在左侧为真时评估右侧。
例如:
If mystring IsNot Nothing And mystring.Contains("Foo") Then ' bla bla End If
如果mystring = Nothing
,上述代码会抛出异常。
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then ' bla bla End If
而下面的代码则不会抛出异常。
因此,如果您来自C#世界,应该像使用&&
一样使用AndAlso
。
更多信息请参见:http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/