2017-04-17 19 views
-2

我怎樣才能每個元素存儲在一個字符串數組Joe, Ben, Carl成獨立的變量,使得GuestA是喬,GuestB是本,並且GuestC是卡爾不使用字典? (請注意,變量按字母順序排列)C#:生成用於在陣列中的每個值單獨的變量

+0

如果你談論動態做這件事,你爲什麼需要這樣做? –

+0

[創建動態變量名稱]的可能重複(http://stackoverflow.com/questions/20857773/create-dynamic-variable-name) –

+0

假設John Wu的答案不是你要找的,而你想要自動創建變量,對使用字典有什麼益處?即使你可以創建它們,你將如何訪問這樣的變量? – john

回答

0

假設你有GuestAGuestBGuestC已經宣佈,你會使用反射這樣的:

private string GuestA; 
private string GuestB; 
private string GuestC; 

private void button1_Click(object sender, EventArgs e) 
{ 
    string variableName; 
    string[] values = {"Joe", "Ben", "Carl" }; 
    for(int i = 0; i < values.Length; i++) 
    { 
     variableName = "Guest" + Convert.ToChar(65 + i).ToString(); 
     System.Reflection.FieldInfo fi = this.GetType().GetField(variableName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
     if (fi != null) 
     { 
      fi.SetValue(this, values[i]); 
     } 
    } 
} 

雖然我懷疑這是不是因爲你所用的你有什麼比較在您的標題中使用「生成」字樣。

+0

我覺得你已經夠接近了。如果有人想知道,我想爲每個數組元素生成單獨的變量,因爲我試圖創建一個機器學習API,它會爲用戶想要添加的每個隱藏層生成一個變量。我希望這會消除混亂。 – ComputersAreCool

2

不確定爲什麼要這樣做,但是如果從字面上理解,此代碼將回答您的問題。

string[] list = new string[] {"Joe","Ben","Carl"}; 
string GuestA = list[0]; 
string GuestB = list[1]; 
string GuestC = list[2]; 

東西告訴我有一些額外的要求,你有麻煩闡明。

+0

我認爲OP的意思是動態地做到這一點。例如。生成26個名爲'GuestA'到'GuestZ'的變量。但是,我不確定會有什麼可能的原因。 –

0

你不能使用像引用類型這樣的字符串,但是你可以通過運算符重載來模擬引用行爲,但是在這種情況下出現一個大問題:無法重載賦值運算符,在代碼下面繞過類屬性風格。但我認爲你可以嘗試像Guest guestD = tempGuest = "Joe Ho";這樣的雙重任務(不確定這一點)。

public class ReferencedStringExample 
{ 
    public void Wrong() 
    { 
     string GuestA = "Joe", 
      GuestB = "Ben", 
      GuestC = "Carl"; 

     var array = new string[] 
     { 
      GuestA, 
      GuestB, 
      GuestC 
     }; 

     GuestA = "Joe Ho"; 

     Debug.Assert(GuestA == array[0]);    
    } 

    public void Right() 
    { 
     Guest GuestA = "Joe", 
      GuestB = "Ben", 
      GuestC = "Carl"; 

     var array = new Guest[] 
     { 
      GuestA, 
      GuestB, 
      GuestC 
     }; 

     GuestA.Val("Joe Ho"); 

     Debug.Assert(GuestA == array[0]); 
     Debug.Assert(GuestA == "Joe Ho"); 

     GuestA = "Joe Ho"; 
     Debug.Assert(GuestA != array[0]); 
     Debug.Assert(GuestA == "Joe Ho"); 
    } 

    public class Guest 
    { 
     string value; 

     public static implicit operator string(Guest g) 
     { 
      return g.value; 
     } 

     public static implicit operator Guest(string s) 
     { 
      return new Guest() { value = s }; 
     } 
     public Guest Val(string s) 
     { 
      this.value = s; 
      return this; 
     } 

     public override bool Equals(object obj) 
     { 
      Guest guest = obj as Guest; 
      return guest.value == this.value; 
     } 
     public override int GetHashCode() 
     { 
      return (value ?? string.Empty).GetHashCode(); 
     } 
    } 
} 
相關問題