Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET:为IF条件内的变量赋值?_Vb.net - Fatal编程技术网

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语言的一个“特性”,我永远不会鼓励使用它,因为它很可能被误用或误解 我认为最好的方法是尝试表达“每行一个想法”,并抵制在同一行中组合两个操作的编码。以这种方式组合赋

在VB.NET中,是否有可能为IF条件内的变量赋值

诸如此类:

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实际上有一半的好主意。只是碰巧是其他坏主意的结果。是的,有点让人困惑,但这也有助于保持代码更干爽。