これは何度も議論されていることは知っていますが、解決策がうまくいかないようです。
私は機能を持っています:
Public Function Test() As Object
Dim retVal As DisposableObject
Dim tempRetVal As DisposableObject
Try
tempRetVal = New DisposableObject
retVal = tempRetVal
tempRetVal = Nothing
Return retVal
Catch
tempRetVal.Dispose()
Throw
Finally
tempRetVal.Dispose()
End Try
End Function
ご覧のとおり、多くの Dispose ステートメントがあります。これは、私がそれを機能させる方法を見つけようとしていたからです。私が見つけた唯一の方法 (明らかに解決策ではありません) は、retVal.Dispose()
retval を返す前に追加することでした。
Public Function Test() As Object
Dim retVal As DisposableObject
Dim tempRetVal As DisposableObject
Try
tempRetVal = New DisposableObject
retVal = tempRetVal
tempRetVal = Nothing
retVal.Dispose()
Return retVal
Catch
tempRetVal.Dispose()
Throw
Finally
tempRetVal.Dispose()
End Try
End Function
どんなヒントでも大歓迎です!:)
注:VS2012を使用しています
編集: MSが提案した単純なテンプレートも試しましたが、どちらも機能しません:
Public Function Test() As Object
Dim retVal As DisposableObject
Dim tempRetVal As DisposableObject
Try
tempRetVal = New DisposableObject
retVal = tempRetVal
tempRetVal = Nothing
Return retVal
Finally
if tempRetVal isnot Nothing then tempRetVal.Dispose()
End Try
End Function
にCA2000を投入tempRetVal = New DisposableObject
。