VB.NET:为IF条件内的变量赋值?
在VB.NET中,是否有可能为IF条件内的变量赋值 诸如此类:VB.NET:为IF条件内的变量赋值?,vb.net,Vb.net,在VB.NET中,是否有可能为IF条件内的变量赋值 诸如此类: Dim customer As Customer = Nothing If IsNothing(customer = GetCustomer(id)) Then Return False End If 谢谢你不,我相当肯定这是不可能的——但要感谢你 这是基于C语言的一个“特性”,我永远不会鼓励使用它,因为它很可能被误用或误解 我认为最好的方法是尝试表达“每行一个想法”,并抵制在同一行中组合两个操作的编码。以这种方式组合赋
Dim customer As Customer = Nothing
If IsNothing(customer = GetCustomer(id)) Then
Return False
End If
谢谢你不,我相当肯定这是不可能的——但要感谢你 这是基于C语言的一个“特性”,我永远不会鼓励使用它,因为它很可能被误用或误解
我认为最好的方法是尝试表达“每行一个想法”,并抵制在同一行中组合两个操作的编码。以这种方式组合赋值和比较通常只能使代码更难理解。VB做得不太好,尤其是赋值和比较都使用
=
运算符。这会让人很困惑。由于VB在某种程度上被设计成对新手友好的语言(“BASIC”中的B实际上代表“初学者”),因此具有多重副作用的表达式通常不是这种语言喜欢做的事情
如果必须能够在一行中完成所有操作,则可以将
GetCustomer
方法分配给ByRef
参数,并返回一个布尔值,说明分配的值是否为null。但实际上,最好是先赋值,然后与null进行比较。对不起,不是。另一方面,这会让人非常困惑,因为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
大声思考,因为您没有向客户或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
这样做没有内置支持,但您可以使用此解决方法
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
是的,可以在VB.NET中为IF条件内的变量赋值。 即使在有限的范围内,也有内置的支持:
If Interlocked.Exchange(customer, GetCustomer(id)) Is Nothing Then
Return False
End If
联锁类中的方法打算在多线程环境中使用。根据设计,Exchange()的返回值是旧值,而不是新值。因此,要获得相当神秘的等效结果:
If (customer = Interlocked.Exchange(customer, GetCustomer(id)) And customer Is Nothing Then
return false
End If
谢谢,所以我只是分配和比较:)作为一个编程专家,我真的不喜欢使用初学者的语言..嗯。作为一名编程专家,我认识到可读性>简洁性我的VB实际上有一半的好主意。只是碰巧是其他坏主意的结果。是的,有点让人困惑,但这也有助于保持代码更干爽。