如果我理解正確你只是想避免嵌套if語句。 您可以通過使用函數並在條件有效時立即使用Return函數來實現此目的。
Function GetUserNames(userList As List(Of UserList), username As String)
If (userList Is Nothing OrElse Not userList.Any()) Then
Return New List(Of String)
End If
If Filter() Then
Return From u In userList Order By (If(u.Name = username, 1, 0)) Descending, u.Name Ascending
End If
Return From u In userList
Select u.Name Distinct
Order By Name Descending
End Function
注意,您沒有嵌套的if語句,實際上您也不需要else部分。
同時利用linq構建語句。假設獨立的名稱應適用於這兩個查詢:
Dim query = userList.Select(Function(u) u.Name).Distinct
If Filter() Then
Return query.OrderByDescending(Function(n) If(n = username, 1, 0)).ThenBy(Function(n) n)
End If
Return query.OrderBy(Function(n) n)
- 更新 -
賞金詢問「..答案來自可信的和/或官方渠道畫畫。」。這就是爲什麼我已經包括馬丁·福勒,的文章的鏈接,其中是這樣描述的設計:
https://www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html
使用三元運算符?它看起來很亂,但是...也許創建一個函數來處理Linq查詢。這將是相當整潔。 –
你的代碼有一堆我可以告訴的錯誤 - If(沒有3個參數,If()之後的神祕用戶名引用,第二個From中的Order By之前的選擇,用戶的不同數據類型那麼和其他部分的嵌套if? – NetMage