メソッドの中から引数として渡した(元の)変数名を取得する方法はあるでしょうか?
課題と希望
C#
1 int originalVar = 0; 2 3 TestWrite(originalVar); 4 5 void TestWrite(int arg) 6 { 7 Debug.Log(this + ": Name = " + nameof(arg)); 8 }
例えばこのように書くと、nameof()が取得するのは「引数名」のため、ログには
Name = arg
と表示されますが、希望としては
Name = originalVar
と表示したいと思っています。
試したこと
当然ではありますが、
C#
1 int originalVar = 0; 2 3 TestWrite(originalVar,nameof(originalVar)); 4 5 void TestWrite(int arg, string name) 6 { 7 Debug.Log(this + ": Name = " + name); 8 }
のように引数に変数名のstringをあらかじめ定義しておくことで一応解決はできるのですが、
スマートな方法とは思えず、全世界の先輩方がこのような方法で解決しているとも思えません。
メソッド内部からそのメソッドに渡した変数名を取得する方法はあるのでしょうか?
大変初歩的な質問で申し訳ありませんが、もしお解りの方がいましたらご回答いただければ幸いです。
まだありません。
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/caller-argument-expression
nameof 演算子が無かった頃、式木型の引数にラムダ式を渡すことでプロパティ名を取り出す方法がはやったことがあります。
そもそもなぜそんなことをしたいのでしょうか。
この手段を取ろうとすること自体が「スマート」でない可能性があります。
> 全世界の先輩方がこのような方法で解決しているとも思えません。
C#に限らず未だかつてそのような必要性にかられたことはありませんね、、、初歩的な質問とも思えません。
回答2件
あなたの回答
tips
プレビュー