2016-09-06 7 views
4

Ich bin neu im Programmieren, also entschuldige meine Neuigkeit. Ich verwende Visual Studio und in meinem Programm habe ich einige Variablen in den Einstellungen, die nach Monaten benannt sind;Gibt es eine Möglichkeit, eine Zeichenfolge im Namen einer Variablen zu verwenden, wenn sie aufgerufen wird?

JanuaryTotalAmount 

JanuarySpentAmount 

JanuaryGainedAmount 

FebruaryTotalAmount 

FebruarySpentAmount 

FebruaryGainedAmount 

ect... 

Also in meinem Code, wenn ich ordnen sie Werte habe ich:

Properties.Settings.Default.JanuaryTotalAmount += EnteredAmount; 
Properties.Settings.Default.SpentAmount -= EnteredAmount; 

Sie nur Werte aufsummieren, die insgesamt erhalten werden eingegeben.

Aber ich habe versucht, meinen Code ordentlicheres zu halten und habe mich gefragt, ob es einen Weg, war des Monats basiert weg von der Benutzer den Monatsnamen ändern ...

So

string month = txtBoxMonth.Text; 

Properties.Settings.Default."month"TotalAmount += TotalAmount 
wählt

Das hält mich dann davon ab, für jeden Monat eine gigantische Switch-Anweisung erstellen zu müssen. Ich weiß nicht, ob es einen Weg gibt, dies zu tun oder nicht, aber jede Hilfe wird anerkannt.

+5

Was ist, wenn Sie 'Dictionary' stattdessen verwenden? – zerkms

+1

Ein Wörterbuch und ein Enum mit Monatsnamen als Schlüssel. –

+0

Was ist die Art der Mengen? ist es "int", "float", "decimal", ...? –

Antwort

5

Sie erwähnen, dass Sie diese Werte derzeit in Ihrer Einstellungsdatei speichern.

Sie können Ihre Einstellungen über die Taste zugreifen:

public void GetMonthAmount(string month) 
{ 
    string keyName = month + "TotalAmount"; 
    object monthData = Properties.Settings.Default[keyName]; 
} 
+3

Dies ist eine gute Lösung, die den OP-Code sinnvoll erweitert. Wie OP jedoch sagte, ist er neu in der Programmierung. Sie sollten diese Funktion wahrscheinlich dazu bringen, das zu tun, was gesagt wird (Getter sollten nicht "void" zurückgeben), und das zurückgegebene "Objekt" auch auf etwas Nützlicheres anwenden. Auch ein Setter wäre nett. –

+0

Danke für die Hilfe allen. Ich war in der Lage, dies zu nehmen und es ein wenig zu ändern, um zu passen, was ich tat, und es funktioniert großartig. Ich arbeite mit Dezimalzahlen, da sie eine Geldmenge darstellen. Also das ist, was ich getan habe ... ========================================== ================================ string key = Monat + "TotalAmount"; Dezimal tempDec = Convert.ToDecimal (Properties.Setting.Default [key]); tempDec + = Convert.ToDecimal ("EnteredAmount"); Properties.Settings.Default [Schlüssel] = tempDec; // Setzt die Eigenschafteneinstellung auf den neuen Wert Properties.Setting.Default.Save(); – Travis

-1

Eine Möglichkeit ist, versuchen Sie Reflection. Mit der Reflektion können Sie den Eigenschaftswert über den Namen unter Verwendung der Funktionen SetValue und GetValue festlegen.
Sie sind neu, so dass Sie mehr im Detail lesen müssen, so dass einige Link als Referenz veröffentlichen.
http://www.tutorialspoint.com/csharp/csharp_reflection.htm
http://www.dotnetperls.com/reflection-property
https://msdn.microsoft.com/en-us/library/axt1ctd9(v=vs.110).aspx

C# Codebeispiel (obj ist Objekt mit Eigenschafts):

Type type = obj.GetType(); 
System.Reflection.PropertyInfo propertyInfo = type.GetProperty("JanuaryTotalAmount "); 
propertyInfo.SetValue(obj, valueToSet, null); 

So, jetzt Logik erstellen, wie es Ihrem Bedarf.

3

Wie andere vorgeschlagen haben, könnten Sie eine Dictionary<> verwenden, um diese Werte zu speichern, mit dem Schlüssel als enum definiert, die Sie auch definieren. Sie können jedoch keine Einstellungen Wert dieses Typs haben direkt, so würde man es in einer Klasse wickeln müssen:

public enum Month 
{ 
    January, 
    February, 
    // and so on... 
    December 
} 


public class Amounts 
{ 
    public Amounts() 
    { 
     Months = new Dictionary<Month, int>(); 
    } 

    public Dictionary<Month, int> Months { get; set; } 
} 

Sie können dann einen Wert, um Ihre Einstellungen hinzuzufügen für jede Ihrer Gesamt, verbracht und gewonnen Mengen, und greifen Sie wie folgt aus:

Properties.Settings.Default.TotalAmounts = new Amounts(); 

Properties.Settings.Default.TotalAmounts.Months[Month.February] = 5; 
+0

Schöne Lösung, aber OP wird wahrscheinlich drei Wörterbücher in den Mengen benötigen: 'TotalAmounts',' SpentAmounts' und 'GainedAmounts'. –

+0

@GoodNightNerdPride - das würde auch funktionieren –

0

Vielen Dank an alle für die Hilfe, so das ist, was ich in der Lage war, mit den bereitgestellten Antworten, um herauszufinden. Und ja, ich habe mit Dezimalzahlen gearbeitet, die einen Geldbetrag darstellen.

string key = month + "TotalAmount"; 
decimal tempDec = Convert.ToDecimal(Properties.Setting.Default[key]); // Creates a decimal to store the setting variable in using the key to access the correct setting variable 
tempDec += Convert.ToDecimal("EnteredAmount"); // Adds the value of the Setting variable to the amount entered. 
Properties.Settings.Default[key] = tempDec; // Then sets the Setting variable to equal the temp variable. 
Properties.Setting.Default.Save(); 

Es funktioniert großartig und viel Platz spart!

Verwandte Themen