2016-12-15 3 views
0

"a = 1, b = 2, c = 3"또는 "c = 5, b = 4"와 같이 변수 쌍을 쉼표로 구분하여 포함 할 수있는 문자열 myString이 있습니다. "또는"t = 12 ". 또한, 정수형 변수 a, b, c, ..., z를 모두 0으로 설정했습니다. 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 문 매우 유사하다 . 유일한 차이점은 런타임에 할당을 작성하여 사전을 만드는 방법에 더 많은 유연성 (코드의 여러 위치에 구축 됨)을 확보 할 수 있다는 것입니다.