C#におけるマクロの代替方法につきまして


CやC++では、引数名 = 値のような出力処理を下記のようなマクロで定義ができ、  
引数を１つ渡すだけで呼び出すことができたと思います。

[code]

    #define  DPRINTF(x)  printf(#x " = %d\n", (x))
    
    DPRINTF(val0);
    DPRINTF(val1);
    
[/code]

一方、C#では言語仕様でマクロが使えないと聞いたのですが、上記のように  
引数を１つ渡すだけで引数名と値を表示できる処理は記述できるのでしょうか？

もしよい方法があれば、ご教授いただけると助かります。




C#はオブジェクト指向を採用しているので、変数そのものを出力したいというシーンがあまりないように思います。  
重要な値であればクラスメンバーとして保持されているでしょうし、`ToString()`もしくは他のメソッドで表現できるようになっているべきです。クラス利用者側は適切なメソッドを呼ぶだけです。

* * *

それでも簡単な記述で変数名と値を取得するためのハックとしては[匿名型](https://docs.microsoft.com/ja-
jp/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types)があります。  
匿名型では本来 `new { name = value }` の形式で構築しますが、省略形式として `new { variable }`
があります。この場合 `nameof(variable)` がプロパティ名となります。  
匿名型の場合、 `,` 区切りで複数の値を指定することができる点と `ToString()` メソッドも適切に動作します。

[code]

    var i = 0;
    var s = "abc";
    
    Console.WriteLine(new { i, s }.ToString());
    // => { i = 0, s = abc }
    
[/code]




C#はオブジェクト指向を採用しているので、変数そのものを出力したいというシーンがあまりないように思います。  
重要な値であればクラスメンバーとして保持されているでしょうし、`ToString()`もしくは他のメソッドで表現できるようになっているべきです。クラス利用者側は適切なメソッドを呼ぶだけです。

* * *

それでも簡単な記述で変数名と値を取得するためのハックとしては[匿名型](https://docs.microsoft.com/ja-
jp/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types)があります。  
匿名型では本来 `new { name = value }` の形式で構築しますが、省略形式として `new { variable }`
があります。この場合 `nameof(variable)` がプロパティ名となります。  
匿名型の場合、 `,` 区切りで複数の値を指定することができる点と `ToString()` メソッドも適切に動作します。

[code]

    var i = 0;
    var s = "abc";
    
    Console.WriteLine(new { i, s }.ToString());
    // => { i = 0, s = abc }
    
[/code]

