2017-04-17 6 views
-2

各要素を文字列配列Joe, Ben, Carlに個別の変数として格納するにはどうすればGuestAがJoe、GuestBがBen、GuestCが辞書なしでCarlですか?変数がアルファベット順に表示されていることに注意してください。配列内の各値に対して個別の変数を生成する

+0

これを動的に行うことについて話したら、なぜそれが必要でしょうか? –

+0

[動的変数名の作成]の可能な複製(http://stackoverflow.com/questions/20857773/create-dynamic-variable-name) –

+0

John Wuの答えがあなたが探しているものではなく、変数を自動的に作成したい、辞書を使用することで得られる利点は何ですか?あなたがそれらを作成することができたとしても、あなたはそのような変数にどのようにアクセスしますか? – john

答えて

0

あなたがGuestAGuestB、およびすでに宣言GuestCを持っていると仮定すると、あなたはこのようにリフレクションを使用したい:

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]); 
     } 
    } 
} 

を私は、これはあなたが使用するので、あなたが持っている非常にものではありません疑うけどあなたのタイトルに "Generate"という単語があります。

+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の意味は、これを動的に行うことだと思います。例えば。 'GuestZ'に' GuestA'という名前の26の変数を生成します。しかし、どのような理由が必要なのかは分かりません。 –

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(); 
     } 
    } 
} 
関連する問題