2016-12-15 4 views
0

Ich habe eine Zeichenfolge myString, die eine variable Anzahl von durch Kommas getrennten Paaren enthalten kann, wie: "a = 1, b = 2, c = 3" oder "c = 5, b = 4 "oder" t = 12 ". Ich habe auch eine Menge ganzzahliger Variablen, benannt a, b, c, ..., z, alle auf 0 gesetzt. Ich möchte myString analysieren und die Werte aus der Zeichenfolge zu jeder Variable zuweisen. Ich kann nur eine ineffiziente Möglichkeit, dies zu tun, mit switch und case (d. H. Wenn myString enthält 'a', extrahieren Wert von 'a' und zuweisen, um die Variable mit dem Namen 'a'). Irgendwelche Ideen, wie man besseren Code für diese Operation schreibt?Zuweisen von Werten zu mehreren Variablen

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

Danke, das habe ich vergessen. Ich habe es einfach hinzugefügt. –

+0

Wenn also Ihre Zeichenkette beispielsweise "x = 14" enthält, möchten Sie Ihrer x-Variablen 14 zuweisen? – Martheen

+2

Müssen Variablen separat benannt werden? Es scheint, als wäre es sinnvoller, die Ergebnisse in einem 'Dictionary ' zu speichern, da es sich um Schlüsselwertpaare handelt. – mason

Antwort

2

Warum sind die Variablennamen wichtig? Sie können nur speichern Sie die Paare in einem

Dictionary<string, int> 



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

Die, wenn Sie

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

Ja, die Variablennamen haben eine Bedeutung für mich (sie sind Eigenschaften eines Objekts), also wenn ich die zu analysierende Zeichenfolge erstelle, fülle ich die relevanten Eigenschaften darin aus. –

1

Sie tun können diese abrufen möchten:

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

Aber es ist immer noch sehr ähnlich zu einem Fall Aussage . Der einzige Unterschied besteht darin, dass Sie die Zuweisungen zur Laufzeit erstellen, sodass Sie mehr Flexibilität bei der Erstellung des Wörterbuchs haben - d. H. Es wird an mehreren Stellen in Ihrem Code erstellt.

Verwandte Themen