如果我理解正确你只是想避免嵌套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