投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/11/6 22:06:52
>> C# には With がありませんし、あまり需要がない機能なのかもしれません。
> C# 版にも with が欲しいというニーズはあるのですが、反対意見も多くあります。

C# 9.0 の段階で、with キーワードが言語機能として追加されるようです。
(C# 9.0 と .NET 5 は、来週開催される .NET Conf 2020 のタイミングでリリースされる見込み)

ただし、VB でいうところの With ステートメント (タカジィさんが使っていたもの)ではなく、
下記の「オブジェクト初期化子」の With に近い式 (初期化用構文) ですけれどね。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/objects-and-classes/how-to-declare-an-object-by-using-an-object-initializer


C# 9.0 の with 式は record 型専用の初期化構文として実装されています。
C# 10.0 あたりでは、匿名型でも with が使えるようになるかもしれません。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/proposals/csharp-9.0/records#with-expression

using System;

// Point レコードの定義
public record Point(int X, int Y);

public class Program
{
    static void Main()
    {
        var p1 = new Point(1, 2);

        // 「with 式」によるレコードの初期化
        var p2 = p1 with { X = 3 };

        // p1 の内容が p2 にコピーされ、X プロパティだけ書き換わっている
        Console.WriteLine(p1); // Point { X = 1, Y = 2 }
        Console.WriteLine(p2); // Point { X = 3, Y = 2 }
    }
}