C# Language Utilizzare Dispose Syntax per definire l'ambito personalizzato

Esempio

Per alcuni casi d'uso, è possibile utilizzare la sintassi using per aiutare a definire un ambito personalizzato. Ad esempio, è possibile definire la seguente classe per eseguire codice in una cultura specifica.

public class CultureContext : IDisposable
{
    private readonly CultureInfo originalCulture;

    public CultureContext(string culture)
    {
        originalCulture = CultureInfo.CurrentCulture;
        Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    }

    public void Dispose()
    {
        Thread.CurrentThread.CurrentCulture = originalCulture;
    }
}

È quindi possibile utilizzare questa classe per definire blocchi di codice che vengono eseguiti in una cultura specifica.

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

using (new CultureContext("nl-NL"))
{
    // Code in this block uses the "nl-NL" culture
    Console.WriteLine(new DateTime(2016, 12, 25)); // Output: 25-12-2016 00:00:00
}

using (new CultureContext("es-ES"))
{        
    // Code in this block uses the "es-ES" culture
    Console.WriteLine(new DateTime(2016, 12, 25)); // Output: 25/12/2016 0:00:00
}

// Reverted back to the original culture
Console.WriteLine(new DateTime(2016, 12, 25)); // Output: 12/25/2016 12:00:00 AM

Nota: poiché non utilizziamo l'istanza di CultureContext che creiamo, non assegniamo una variabile per questo.

Questa tecnica viene utilizzata dal BeginForm aiutante in ASP.NET MVC.