2017-11-13 1 views
-2

変数名自体の値を格納するために使用する文字列変数の束を作成しています。 例えばC#コンストラクタ内のオブジェクトの変数名を取得

string name = "name"; 
string number="number; 

が、リストが長くなるにつれて、それは繰り返し、すべてを入力するために大変な作業となりますので、私は単なる文字列データを保持するクラスを作って、汚い仕事をするためにコンストラクタをしましょう。

public static void Main() 
{ 
//Declare an object here, the constructor will automatically assign the 
//variable name to the property. 
Data number = new Data(); 
Console.WriteLine(number.name); 
} 

出力は次のようになります:「数」、変数名そのものである例えば

class Data 
{ 
public Data() 
{ 
//pseudo code here: 
name = NameOfTheVariable(this); 
} 
public string name {get;set;}  
} 

だから理想的な出力はこのようなものになるだろう。

私はこの記事で言及MemberExpression使用してみました:get name of a variable or parameter

をしかし、関数がキーワードになりません「この」有効な引数として。 ので、私は例えば、そのポストで提供される機能を使用することはできません。

class Data 
{ 
public Data() 
{ 
//This line will not work 
name= MemberInfoGetting.GetMemberName(() => this); 
} 
public string name{get;set;} 

} 

誰もが、私はこの問題を解決することができる方法を知っていますか? C#6.0とそれ以上で

+1

これはちょっと複雑で奇妙な方法です。静的クラスを作成し、その静的フィールドとして変数を宣言する必要があります。 –

+3

あなたはこれが何のために必要なのでしょうか?リフレクションによって変数/プロパティ名を取得できます。しかし、それはちょっと遅いです。また、最近のバージョン(正確に導入された時期は確かではありません)には、 'nameof()'があります... – Fildor

+0

'nameof'が利用できないC#版で作業していますか? – Evk

答えて

0
Data number = new Data(); 
Console.WriteLine(number.name); 

次のようになります。リンクされたプリC#6のためのソリューションがそれに応じて動作します

SomeNumberClass number = new SomeNumberClass(); 
Console.WriteLine(nameof(number)); 

、あなただけnameofを書きませんが、代わりに静的メソッドを使用します。

+0

しかし、コンストラクタでそれをやりたいのであれば、変数名を値として代入することはできません。なぜなら、引数 ' –

+0

@ C.Daでthisキーワードを使うことができないからです。 'Data'のCTORではこれをしません。私はあなたの例でそれを使用したので、ここでデータを残しました。最後のスニペットは、C#6.0より前のC#バージョンを使用する場合、 'Console.WriteLine(nameof(number));'行の代わりに呼び出されるだけです。 – Fildor

関連する問題