2016-12-10 6 views
0

内のオブジェクト名を使用する方法: 塩:2 スキル:それを行う方法が ありますか?何とか我々はあなたがそれを行うことはできませんどのクラスC#私は M2Kを印刷したい。この場合

namespace practice 
{ 
class SmashPlayer 
{ 
    private int salt, skill; 
    public SmashPlayer(int salt, int skill) 
    { 
     this.salt = salt; 
     this.skill = skill; 
    } 
public void print() 
    { 
     Console.WriteLine("{0}'s\nsalt:{1}\nskill:{2}",Name of object,salt,skill); 
    } 

} 
class Program 
{ 

    public static void Main(string[] arg) 
    { 



     SmashPlayer m2k = new SmashPlayer(2,5); 
     m2k.print(); 

    } 
    } 
} 
+2

http://stackoverflow.com/questions/72121/finding-the-variable-name-passed-to-function-in-c-sharpあなたが尋ねたことを正確に達成するためのいくつかのオプションがあります。通常は、ユーザーに表示できるものには変数名を使用しないことに注意してください。実際の目的に応じて、従来のソリューション( 'Name'プロパティを追加するだけです)があります。 –

答えて

2

これは実際には不可能です。 簡単な例:

SmashPlayer m2k = new SmashPlayer(2,5); 
SmashPlayer m2k_again = m2k; 

2つの変数が、それはあなたが変数名として書くべきか、クラスの同じインスタンスですか? m2kまたはm2k_again?

可能な解決策については、黙示録の回答を参照してください。 https://stackoverflow.com/a/41080725/5281555

2

を使用しているオブジェクトの名前を取得する
。コンストラクタに文字列を渡す必要があります。

SmashPlayer m2k = new SmashPlayer (2, 5, "m2k"); 

もちろん、新しいパラメータをそのコンストラクタに追加してインスタンスフィールドに保存する必要があります。

リファクタリングの問題を回避するには、nameof演算子を使用できます。

SmashPlayer m2k = new SmashPlayer (2, 5, nameof (m2k)); 
+0

リファクタリングの問題は何ですか? – SuperMinefudge

+0

@SuperMinefudge:たとえば、 'm2k'変数の名前を' newName'に変更すると、コンストラクタに渡される "m2k"文字列を更新するのを忘れるでしょう。しかし、 'nameof'演算子を使うと、リファクタリングツールはこれを認識し、' nameof(m2k) 'を' nameof(newName) 'に変更します。 – apocalypse

+0

ああありがとうございました – SuperMinefudge

関連する問題