2015-12-04 42 views
0

我想要使用字符串來獲取對現有類變量的引用。我已經看到了一些類似的東西的例子,但似乎可以看出這一點。如何使用字符串引用現有的類變量?

請參與評論部分!

public class MyClass 
{ 
    public int myInt; 

    public MyClass(int i) 
    { 
     myInt = i; 
    } 
} 

void Start() 
{ 
    MyClass myclass = new MyClass(1); 

    MyClass myOtherClass = //Should be equal to myClass BUT I want to use the string "myClass" to reference it. 
} 
+0

你想只有一個MyClass的實例運行? –

+3

你的問題沒有意義,需要更多細節。 –

+0

你有沒有嘗試反思? –

回答

1

即使使用反射,也不能通過字符串名稱訪問局部變量。一種選擇是將它們存儲在一個字典:

var dict = new Dictionary<string, MyClass>(); 
dict.Add("myClass", myClass); 

string varName = "myClass"; 
MyClass myOtherClass = dict[varName]; 

但爲什麼要通過字符串名稱來訪問它,它不是在所有清楚。我懷疑你的實際問題有更好的解決方案。

+0

,我發表了另一個答案,哈哈 – David

+0

謝謝,快速跟進...如果這個私人我能做到嗎?那是通過字符串引用它? – Gullie667

+0

意思是一個私人類字段?是的,在技術上你可以做到,但我仍然認爲可能有更好的方法來解決潛在的需求。 –

1

雖然問題是很怪,但這裏是愚蠢的解決方案:

var instances = new Dictionary<string, MyClass>(); 
MyClass instance= new MyClass(1); 
//the string "instance" can be replaced with "nameof(instance)" using C# 6.0 
instances.Add("instance", instance); 

按名稱訪問這個實例:

MyClass myOtherInstance = instances["instance"]; 
+1

nameof的使用是在C#6中,而不是.NET 4.5 –

+0

@AlbertoMonteiro,謝謝!更新。 – David

0

奇怪的問題,很想知道這是什麼你想:

public class MyClass 
    { 
     public int myInt; 

     public MyClass(int i) 
     { 
      myInt = i; 
     } 
    } 

    public class Starter 
    { 
     private MyClass myclass; 
     public void Start() 
     { 
      myclass = new MyClass(1); 

      var type = this.GetType(); 

      var variable = type.GetField("myclass", BindingFlags.NonPublic | BindingFlags.Instance); 

      MyClass myOtherClass = (MyClass)variable.GetValue(this); 
     } 
    } 
相關問題