ICYMI C# 8 の新機能:宣言を使用してコードの記述を減らす

これは一連の記事のパート 2 です。

C# 8 で導入された 1 つの優れた拡張機能は、破棄可能なオブジェクトを使用するコードを簡素化するのに役立ちます。

たとえば、次のことを考えてみてください:

class MyDisposableClass : IDisposable
{
    public void Dispose()
    {            
        Console.WriteLine("Disposing");
    }

    public void Run() 
    {
        Console.WriteLine("Running");
    }
}

C# 8 より前では、使い捨てオブジェクト (IDisposable を実装するもの) を使用する場合は、通常、次のように using ブロックを使用していました。

private static void Process()
{
    using (var x = new MyDisposableClass())
    {
        x.Run();
    }
}

using ブロックの最後にある Dispose() メソッドが自動的に呼び出されます。

C# 8 では、using ブロックの代わりに using 宣言 を使用できます。 :

private static void Process()
{
    using var x = new MyDisposableClass();

    x.Run();
}

前のコードで、using 宣言を使用すると、{} を追加する必要がないことに注意してください。 using 宣言を使用する場合、Dispose() メソッドは Process() の最後に自動的に呼び出されます 方法。ブロックを使用するアプローチと同様に、Process() 内で例外が発生した場合 メソッドの次に Dispose() まだ呼び出されます。

宣言を使用すると、中かっこが少なくなるため、コードがすっきりします {} インデントが 1 レベル少なくなります。

たとえば、複数の用途がある場合:

private static void Process()
{
    using (var x = new MyDisposableClass())
    using (var y = new MyDisposableClass())
    using (var z = new MyDisposableClass())
    {
        x.Run();
        y.Run();
        z.Run();
    }
}

これを C# 8 で次のように書き直すことができます。

private static void Process()
{
    using var x = new MyDisposableClass();
    using var y = new MyDisposableClass();
    using var z = new MyDisposableClass();

    x.Run();
    y.Run();
    z.Run();
}

C# の知識のギャップを埋めたい場合は、Pluralsight の C# のヒントとトラップのトレーニング コースを必ずチェックしてください。無料トライアルを開始してください。