2016-03-31 16 views
0
var a = new myTestClass(); 
var b = new myTestClass2(); 
list<string> instList = new list<string>(); 
instList.add("b"); 

public void simpleFunc() 
{ 
foreach(string i in instList){ 
a.fieldName = **i.myFieldName;** 
//HERE i is b which refers to the instance of myTestClass2 
} 

私がここで達成したいのは以下の通りです:クラスインスタンスの名前である文字列のリストを作成し、各ループに対してインスタンス名のインスタンスのようなinstlist文字列を使用します。そのクラスのプロパティに何かを追加するクラスのインスタンス名の代わりにテキストを使用する

これは可能ですか?

答えて

2

本当にやりたければ、その名前をキーに、インスタンスを値として辞書を作成できます。私はなぜあなたは変数名がとても重要だと思っているのだろうかと思います...変数名は簡単に変更でき、結局は実際のオブジェクトへのポインタに過ぎません。変数の 'メタデータ'を保存するクラスを作成するべきではありませんか?

Dictionary<string, string> d = new Dictionary<string, string>(); 
d.Add(nameof(a), a); 
d.Add(nameof(b), b); 

string valueAtB = d["b"]; 
+0

注:がNameOfは、C#6.0でのみ利用可能ですので、あなたは、このコードは実際に –

+0

をコンパイルしません以前のバージョンを使用している場合は、あなただけの 'd.Add使用することができます(「b」を、B)。これは表情豊かではありませんが同じことです。 –

+0

名前を取得する方法を提供するこのソリューションをチェックしてください。pre c#6 http://stackoverflow.com/questions/9801624/get-name-of-a-variable-or-parameter – CathalMF