2010-07-28 88 views

回答

6

对不起,没有。另一方面,它会变得非常混乱,因为VB.NET对赋值和相等使用相同的运算符。

If a = b Then 'wait, is this an assignment or comparison?! 

相反,只需设置变量和比较:

Dim customer As Customer = Nothing 

customer = GetCustomer(id) 

If IsNothing(customer) Then 
    Return False 
End If 
+0

好吧,然后我用这种方法:) – Torben 2010-07-28 07:06:35

+0

有点混乱,是的,但也有助于保持代码更干。 – 2014-11-07 14:50:58

4

不,我相当肯定这是不可能的 - 而是心存感激!

这是基于C语言的一个“功能”,我永远不会鼓励使用它,因为它可能被误用或被误解的频率更高。

我认为最好的方法是尝试表达“每行一个想法”,并抵制在同一行中组合两个操作的编码。以这种方式组合赋值和比较通常不会让代码更难理解。

2

VB并没有那么做,特别是因为赋值和比较都使用了=运算符。它会变得非常混乱。而且由于VB在某种程度上被设计为新手友好(“BASIC”中的B实际上代表“初学者”),因此具有多种副作用的表达式不是该语言通常喜欢做的事情。

如果必须能够在一行中完成所有操作,那么可以将GetCustomer方法分配给ByRef参数,并返回一个布尔值,表示赋值是否为空。但是真的,最好只分配,然后与null进行比较。

+0

谢谢你,所以我只是分配和比​​较:) – Torben 2010-07-28 07:07:34

+0

作为prgramming专家,我真的很讨厌用初学者语言.. – Gqqnbig 2017-11-01 21:56:56

+0

咩。作为编程专家,我认识到可读性>简洁。 :)国际海事组织VB实际上有一个好主意在这里。恰巧碰巧是其他不好的想法的结果。 – cHao 2017-11-01 22:55:12

0

想大声,因为你并没有显示客户或GETCUSTOMER ...

 Dim myCust As New Customer 
     If myCust.GetCustomer(someID) Then 

     End If 

Class Customer 

    Private _customerID As Integer 
    Const noCustomer As Integer = -1 

    Public Sub New() 
     Me._customerID = noCustomer 'no customer 
    End Sub 

    Public Function GetCustomer(ByVal id As Integer) As Boolean 
     'perform required action to get customer 
     'if successful then set Me._customerID to ID else set it to no customer value 
     Return Me.HaveCustomer 
    End Function 

    Public Function HaveCustomer() As Boolean 
     If Me._customerID = noCustomer Then Return False Else Return True 
    End Function 
End Class 
1

没有内置支持为此,但您可以使用此解决方法。

Public Function Assign(Of T)(ByRef destination As T, ByVal value As T) As T 
    destination = value 
    Return destination 
End Function 

然后它可以像这样使用。

Dim customer As Customer = Nothing 

If IsNothing(Assign(customer, GetCustomer(id))) Then 
    Return False 
End If