非常(非常)经常,我们需要编写以下类似的内容:
Dim Data = GetSomeData()
If Data IsNot Nothing Then
Data.DoSomething()
Else
...
End If
也许我的期望徒劳无功,但我真诚地希望VB.Net有类似以下结构的语法:
IfExists Data = GetSomeData() Then
Data.DoSomething()
Else
...
End IfExists
在我的梦想中,它可以做两件重要的事情:
- 不需要额外的“Nothing”检查
- 变量A在块外部不可见,因此不会被错误地后续使用(就像“Using”或“With”一样)
谢谢!
编辑: 受Bjørn-Roger Kringsjå答案的启发,我想出了一个能满足我需求的东西(因为VB.Net的缺陷而感到谦卑):
<Extension()>
Public Sub IfExists(Of T)(This As T, DoIfNotNothing As Action(Of T), Optional DoIfNothing As Action = Nothing)
If This IsNot Nothing Then
DoIfNotNothing(This)
ElseIf DoIfNothing IsNot Nothing Then
DoIfNothing()
End If
End Sub
然后我可以像这样调用它(false 部分是可选的)。
GetSomeData().IfExists(Sub(Data) Data.DoSomething())
或者
GetSomeData().IfExists(Sub(Data) Data.DoSomething(), Sub() DoSomethingElse())
"不在块外可见"
*,那么你打算在什么时候/地方声明变量A
呢?也许像这样吧:IfExists Dim A As Object = GetSomeData() Then
。 - Bjørn-Roger KringsjåUsing T = New DataTable
或For i = 0 to 9
一样。现在已经可以实现,也不需要Dim。类型推断会自动确定数据类型。 - MajnuC#
中,你可以这样写if((A=GetSomeData())!=null) { ... }
。啊,C#
的强大之处(借鉴自C
)。 - John Alexiou