2012-03-09 12 views
2

変数の文字列名がメソッドに渡される場合、どの変数を使用するか分かります。C#:渡されるときに変数を使用する文字列名

次の例では、私が助けが必要な領域はPrintVar(string)です...文字列引数を変数に変換する... "ここに変数1"と "ここで変数2 "それぞれ...ありがとう!その後、


class ReflectionTest 
{  
    class MyObj 
    { 
     private string myvar; 

     public MyObj(string input) 
     { this.myvar = input; } 

     public override string ToString() 
     { return ("here be " + myvar); } 
    } 

    class MyClass 
    { 
     private MyObj var1; 
     private MyObj var2; 

     public MyClass() 
     { 
      var1 = new MyObj("variable 1"); 
      var2 = new MyObj("variable 2"); 
     } 

     public void PrintVar(string theVariable) 
     { 
      Console.WriteLine(theVariable); 
     } 
    } 


    static void Main() 
    { 
     MyClass test = new MyClass(); 
     test.PrintVar("var1"); 
     test.PrintVar("var2"); 
    } 
} 
+0

ほとんどの場合、コレクションを使用する方がはるかに簡単で、より良い方法です。 –

答えて

6

名前で物事をフェッチする必要がある場合は、個人的に私はすなわち

private readonly Dictionary<string,MyObj> fields =new Dictionary<string,MyObj>(); 

public MyClass() 
{ 
    fields["var1"] = new MyObj("variable 1"); 
    fields["var2"] = new MyObj("variable 2"); 
} 
public void PrintVar(string fieldName) 
{ 
    Console.WriteLine(fields[fieldName]); 
} 

他のオプション、内部実装に辞書を使用して起動したいでしょう反射(GetType().GetFields()):

public void PrintVar(string fieldName) 
{ 
    Console.WriteLine(GetType().GetField(fieldName, 
     BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this)); 
} 
+0

ありがとう!私は反映の例とあなたの推薦されたディクショナリ実装に感謝します – user1229895

+0

もう1つ質問... 私が追加した場合... public void WriteOut(){Console.WriteLine( "ありがとうございました"); \t} ... 'MyObj'クラスに...私はPrintVar(文字列)内でどのように呼びますか? 私はまだ反映が何を返すのかわからないと思います... – user1229895

+1

@ user1229895フィールド名[fieldName] .WriteOut();または((MyObj)GetType()。GetField(前と同じです)。 GetValue(this))。WriteOut(); ' –

関連する問題