非常(经常)我们需要写一些像
Dim Data = GetSomeData() If Data IsNot Nothing Then Data.DoSomething() Else ... End If
也许我是在徒劳地问,但我非常希望VB.Net有一些结构如下:
IfExists Data = GetSomeData() Then Data.DoSomething() Else ... End IfExists
在我的梦中,它做了两件重要的事情:
>没有额外的行没有检查
>变量A在块外不可见,因此以后不能错误地使用(就像“使用”或“使用”一样)
有什么类似于我还没有发现的东西吗?
谢谢!
编辑:
灵感来自Bjørn-RogerKringsjå的答案,我想出了一些令我满意的东西(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
然后我可以像这样调用它(假部分是可选的)
GetSomeData().IfExists(Sub(Data) Data.DoSomething())
要么
GetSomeData().IfExists(Sub(Data) Data.DoSomething(),Sub() DoSomethingElse())
解决方法
正如其他人所说并且我暗示的那样,它无法完成.就像分享一个3’解决方案.这次我们将使用
delegates.
>没有额外的行没有检查
>变量A在块外部不可见,因此以后不能错误地使用.
履行
Public Module Extensions Public Sub IfExists(Of T)(testExpr As T,trueDlg As Action(Of T),falseDlg As Action) If (Not testExpr Is Nothing) Then trueDlg.DynamicInvoke(New Object(0) {testExpr}) Else falseDlg.DynamicInvoke(New Object(-1) {}) End If End Sub End Module
用法
IfExists(GetSomeData(),Sub(A As Object) 'We have something (A) End Sub,Sub() 'We have nothing End Sub )
短:
IfExists(GetSomeData(),Sub(A As Object) 'We have something (A) End Sub,Sub() 'We have nothing End Sub)
或者,最短的版本:
IfExists(GetSomeData(),Sub(A As Object) Debug.WriteLine(A.ToString()),Sub() Debug.WriteLine("Nothing"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。