Identificação de abuso descartável em C #

Digamos que você precise criar um diretório temporário e excluí-lo depois de terminar.
Então você escreve um código assim:

DirectoryInfo tmpdir = Helper.CreateTemporaryDirectory();

DoStuff(tmpdir);

tmpdir
.Delete(true);

Fácil, certo? Bem, e se houver uma exceção e o diretório for
excluído mais recentemente? Você pode, é claro, encerrar as chamadas para tentar – finalmente, mas pode ser
muito complicado, especialmente se você precisar fazer isso muito.

Para remediar isso, você pode implementar IDisposable e deixar o compilador se preocupar
com tudo:

class TemporaryDirectory : IDisposable
{
public DirectoryInfo Directory { get; private set; }

public TemporaryDirectory()
{
Directory = Helper.CreateTemporaryDirectory();
}

public void Dispose()
{
if (Directory != null)
Directory.Delete(true);
Directory = null;
}
}

Quando você usa sua nova classe desta forma:

using (var tmpdir = new TemporaryDirectory())
DoStuff(tmpdir.Directory);

Você não precisa se preocupar com a limpeza, pois isso acontecerá automaticamente.