VB.NET: Присвоить значение переменной в ЕСЛИ условие?

там возможность состоит в том, чтобы присвоить значение переменной в ЕСЛИ условие в VB.NET?

Что-то как этот:

Dim customer As Customer = Nothing

If IsNothing(customer = GetCustomer(id)) Then
    Return False
End If

Спасибо

6
задан Torben 28 July 2010 в 06:35
поделиться

5 ответов

Извините, нет. С другой стороны, это может сбить с толку, поскольку 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
7
ответ дан 8 December 2019 в 14:39
поделиться

VB не очень хорошо справляется с этим, тем более что и присваивание, и сравнение используют оператор = . Это действительно сбивает с толку. А поскольку VB в какой-то степени разработан для новичков (B в «BASIC» на самом деле означает «Beginner's»), выражения с множественными побочными эффектами - это не то, что язык обычно любит делать.

Если важно, чтобы вы могли сделать все в одной строке, вы можете назначить метод GetCustomer параметру ByRef и вернуть логическое значение, указывающее, присвоенное значение было нулевым. Но на самом деле лучше просто присвоить, а затем сравнить с нулем.

3
ответ дан 8 December 2019 в 14:39
поделиться

Нет, я почти уверен, что это невозможно, но будьте благодарны!

Это «особенность» языков на основе C, которую я бы никогда не поощрял использовать, потому что она, вероятно, чаще всего неправильно используется или неправильно интерпретируется.

Я думаю, что лучший подход - попытаться выразить «одну мысль в строке» и противостоять кодированию, которое объединяет две операции в одной строке. Такое комбинирование присваивания и сравнения обычно не приводит ни к чему другому, кроме как к усложнению понимания кода.

4
ответ дан 8 December 2019 в 14:39
поделиться

Мысли вслух, потому что вы не показали клиента или 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
0
ответ дан 8 December 2019 в 14:39
поделиться

Для этого нет встроенной поддержки, но вы можете использовать этот обходной путь.

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 
2
ответ дан 8 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: