2016-03-31 22 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 
} 

sınıflarının adlarını kullanmak yerine aşağıdakileri yapın: bir sınıf listesi oluşturmak için sınıf örneklerinin isimleri oluşturulduktan sonra her bir döngü içinde bir liste dizesi kullanın. Sınıfı ve bu sınıfın bir özellik eklemek için bu birÖrnekler yerine

mümkün mü?

cevap

2

Bunu gerçekten yapmak istiyorsanız, anahtar adı ve örneği değer olarak bir sözlük oluşturabilirsiniz. Değişken ismin bu kadar önemli olduğunu neden düşündüğünüzü merak ediyorum ... Değişken adı kolayca değişebilir ve sonuçta gerçek nesnenin sadece bir göstergesidir. Değişkenin 'meta verilerini' kaydetmek için bir sınıf oluşturmamalısınız?

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

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

Not: o zaman sadece 'd.Add kullanabilirsiniz, bu kod Nitekim –

+0

derlenmeyecektir önceki bir sürümünü kullanıyorsanız eğer öyleyse NameOf, C# 6.0 kullanılabilir ("b", b); Bu, bu etkileyici değil ama aynı şeyi yapıyor. –

+0

İsmi C# 6 almak için bir yol sağlayan bu çözümü kontrol edin http://stackoverflow.com/questions/9801624/get-name-of-a-variable-or-parameter – CathalMF

İlgili konular