我在这里看到question,他们实现了一个通用的dispose方法,该方法接受任何IDisposable对象并在其上调用dispose。我想这样做,它可以采取可变数量的args。但是,我确实希望在编译时将args限制为IDisposable。 (这是因为我组织中的某些人甚至会在非IDisposable对象上调用此方法“只是为了安全”和“它不会造成伤害”)
我在VB中实现了相同的功能。我怎么能让它采取多个args。请注意,我确实希望它们通过引用传递,因为我将变量设置为空。
Public Sub DisposeObject(Of TDisposable As IDisposable)(ByRef disposableObject As TDisposable)
If disposableObject IsNot Nothing Then
disposableObject.Dispose()
disposableObject = Nothing
End If
End Sub
答案 0 :(得分:1)
在VB中,你会得到一个带有可变数量参数的方法,并在数组参数上使用ParamArray修饰符。
但请注意,ParamArray参数必须声明为ByVal,并且对数组的更改对调用代码没有影响。所以你不能同时拥有可变数量的参数和ByRef语义。
答案 1 :(得分:0)
Donno VB但在C#中你可以写:
public void DisposeObjects(params IDisposable[] args)
{
foreach(IDisposable obj in args)
{
if(obj != null)
{
obj.Dispose();
}
}
}
答案 2 :(得分:0)
以下是您的操作方法:
Public Sub DisposeObject(ByVal ParamArray disposableObjects() As IDisposable)
For Each obj As IDisposable In disposableObjects
If Not IsNothing(obj) Then obj.Dispose()
Next
End Sub
但我不推荐这样的解决方案。使用“使用”语句要好得多。
在c#
中using (var obj = new TypeImlementingIdisposable)
{
//do stuff with the object here
}
和vb:
Using obj As New TypeImlementingIdisposable
' do stuff with the object here
End Using
这可确保处置总是的对象,无论是否抛出异常都无关紧要。
您可以在msdn
了解更多信息答案 3 :(得分:0)
Public Sub DisposeObjects(Of T As IDisposable)(ByRef disposableObject As T)
Dim disposable As IDisposable = CType(disposableObject, T)
disposableObject = CType(Nothing, T)
If (disposable IsNot Nothing) Then
disposable.Dispose()
End If
End Sub
用法:
Dim任意为Foo = New Foo
DisposeObjects(CType(any,Foo))