там возможность состоит в том, чтобы присвоить значение переменной в ЕСЛИ условие в VB.NET?
Что-то как этот:
Dim customer As Customer = Nothing
If IsNothing(customer = GetCustomer(id)) Then
Return False
End If
Спасибо
Извините, нет. С другой стороны, это может сбить с толку, поскольку 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
VB не очень хорошо справляется с этим, тем более что и присваивание, и сравнение используют оператор =
. Это действительно сбивает с толку. А поскольку VB в какой-то степени разработан для новичков (B в «BASIC» на самом деле означает «Beginner's»), выражения с множественными побочными эффектами - это не то, что язык обычно любит делать.
Если важно, чтобы вы могли сделать все в одной строке, вы можете назначить метод GetCustomer
параметру ByRef
и вернуть логическое значение, указывающее, присвоенное значение было нулевым. Но на самом деле лучше просто присвоить, а затем сравнить с нулем.
Нет, я почти уверен, что это невозможно, но будьте благодарны!
Это «особенность» языков на основе C, которую я бы никогда не поощрял использовать, потому что она, вероятно, чаще всего неправильно используется или неправильно интерпретируется.
Я думаю, что лучший подход - попытаться выразить «одну мысль в строке» и противостоять кодированию, которое объединяет две операции в одной строке. Такое комбинирование присваивания и сравнения обычно не приводит ни к чему другому, кроме как к усложнению понимания кода.
Мысли вслух, потому что вы не показали клиента или 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