如果在使用语句结束之前调用Dispose()会发生什么?

Ima*_*heh 8 c# using-statement

我有这个代码,我担心它"不安全"我在使用语句结束之前使用了Dispose(),对我来说它有点不合逻辑,但它工作得很好.那么,这样安全吗?

using (FileStream stream = new FileStream(SfilePath, FileMode.Open))
{
    try
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(HighscoresViewModel));
        HVM = deserializer.Deserialize(stream) as HighscoresViewModel;
    }
    catch (InvalidOperationException) 
    {
        stream.Dispose();
        (new FileInfo(SfilePath)).Delete();
        HVM = new HighscoresViewModel();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 14

IDisposable.Dispose各州的文件:

如果多次调用对象的Dispose方法,则该对象必须忽略第一个之后的所有调用.如果多次调用Dispose方法,则该对象不得抛出异常.除了Dispose之外的实例方法可以在已经处置资源时抛出ObjectDisposedException.

假设IDisposable正确实施,这种使用是安全的.Dispose将被召唤第二次,并且第二次不会做任何事情.