2016-12-15 23 views
0

「a = 1、b = 2、c = 3」または「c = 5、b = 4」のように、可変数のペアをカンマで区切って含むことができる文字列myStringがあります。 "または" t = 12 "と表示されます。 私は、myStringを分析してstringから各変数に値を代入したいと思っています。 スイッチと大文字小文字を使用して(つまり、myStringに 'a'が含まれている場合は 'a'の値を抽出し、 'a'という名前の変数に代入すると)非効率的な操作しかできません。どのようにこの操作のためのより良いコードを書くための任意のアイデア?複数の変数に値を割り当てる

void Test(string myString) 
    { 
     int a, b, c, d; 
     a = b = c = d = 0; 
     string[] varNames = {"a", "b", "c", "d"}; 
     for(int i = 0; i < varNames.Length; i++) 
     { 
      if(myString.IndexOf(varNames[i]) >= 0) 
      { 
       VariableWhoseNameIs(varNames[i]) = 3; 
      } 
     } 
    } 
+0

ありがとう、私はそれについて忘れました。私はちょうどそれを追加した。 –

+0

例えば、文字列に "x = 14"が含まれている場合、x変数に14を割り当てたいとしますか? – Martheen

+2

別名の変数が必要ですか? 'Dictionary 'に結果を格納する方がキー値のペアなので、意味があるようです。 – mason

答えて

2

なぜ変数名が重要なのですか?あなたはちょうどあなたが

var value = values[myString].value; 
+0

はい、変数名は私にとって意味があります(それらはオブジェクトのプロパティです)、解析する文字列を作成するときに変数名を記入します。 –

1

を取得したいときは、これを行うことができますザ・

Dictionary<string, int> 



Dictionary<string, int> values= new Dictionary<string, int>() 
{ 
    { a, 1} 
    { b, 2} 
}; 

をペアを格納することができます:

void Test(string myString) 
{ 
    int a, b, c, d; 
    a = b = c = d = 0; 

    var assign = new Dictionary<string, Action<int>>() 
     { 
      { "a", n => a = n }, 
      { "b", n => b = n }, 
      { "c", n => c = n }, 
      { "d", n => d = n }, 
     }; 

    string[] varNames = { "a", "b", "c", "d" }; 
    for (int i = 0; i < varNames.Length; i++) 
    { 
     if (myString.IndexOf(varNames[i]) >= 0) 
     { 
      assign[varNames[i]](3); 
     } 
    } 
} 

しかし、それはまだcase文に非常によく似ています。唯一の違いは、実行時に割り当てを作成することで、辞書の作成方法に柔軟性がある、つまりコード内の複数の場所に構築されていることです。

関連する問題