所以,我正在研究一个项目,并且遇到了一些我以前从未见过的奇怪语法。同样,这是在VB.Net和代码工作。这是不调试问题。那么,这个VB.Net代码片段发生了什么(下面代码的问题澄清):
Dim dt As String = If(OtherObject.Length > 1, OtherObject(1), "")
这是令我不安的问题,这是不一个IIF
语句,但它似乎是一个(?)。
答案 0 :(得分:3)
您看到了If Operator:
使用短路评估有条件地返回两个值中的一个。可以使用三个参数或两个参数调用If运算符。
尤其是使用三个参数调用的If运算符:
当使用三个参数调用If时,第一个参数必须求值为可以强制转换为布尔值的值。该布尔值将确定评估和返回其他两个参数中的哪一个。仅当使用三个参数调用If运算符时,以下列表才适用。
这就是令我不安的问题,这不是一个IIF声明,但似乎是一个(?)。
它取代了现在过时的IIf method。优于IIf
的优点是If
支持短路评估,而不是方法。 IIf
将始终评估两个参数。
答案 1 :(得分:0)
当以这种方式使用时,IF是短路三元运算符。使用IIF评估双方。
http://www.panopticoncentral.net/2007/05/08/iif-becomes-if-and-a-true-ternary-operator/
基本上有一个If..Then ... Else 语句,大多数人在VB.NET中调用If语句,并且有一个If 运算符,你偶然发现了。
答案 2 :(得分:0)
这个IF运算符声明字符串“dt”并在同一行代码中给它一个值。 If语句的第一个参数是逻辑问题,第二个和第三个参数是语句将返回的值,如果为true,则分别为false。
如果otherobject的长度大于1,那么dt将是其他对象中具有索引1 {otherobject(1)}的项目。
如果otherobject的长度不大于1,则该语句为false,dt将为“”或空白。