c# switch Alternative zum Schreiben vieler if-Anweisungen?




if else (4)

Gibt es eine Möglichkeit, stattdessen eine switch Anweisung zu schreiben?

switch (something)
{
  case "degrees" : do work
  ...etc
}

Hier ist meine Methode:

private void ConvertValues()  
{  
    txtResult.Text = angles[cmbUnits1.SelectedIndex];  
    double value1 = Convert.ToDouble(txtValue1.Text);  
    double value2 = Convert.ToDouble(txtValue2.Text);  
    int unit1 = cmbUnits1.SelectedIndex;  
}

Ich möchte, dass die Methode die ComboBoxes auswählt und die Werte testet. Aber ich möchte wissen, ob es eine Alternative dazu gibt:

if( angles[cmbUnits1.SelectedIndex].Equals("Degrees") && 
    angles[cmbUnits2.SelectedIndex].Equals("Radians")) {  
    ...  
}

Übrigens mache ich eine Art Einheitskonverter, also werde ich andere Abschnitte als Winkel haben. Also ich möchte etwas enum, Schnittstelle, abstrakte Klasse oder Klasse, die ich implementieren kann. Vielleicht eine Klasse mit dem Namen Unit? So kann ich neue Objekte wie Unit degrees = new Unit(Units.Angle) mit Einheiten als Enum Unit degrees = new Unit(Units.Angle) . Oder nur Unit sqrMillimeters = new Unit("Area"); ?


double UnitToFactor(string unit) { returns 1 for radians, pi/180 for degrees, etc }

dann

ratio = UnitToFactor(unit1) / UnitToFactor(unit2);

und dest = src*ratio

Auf diese Weise haben Sie anstelle von N ^ 2 if () -Anweisungen nur N.


Wie wäre es mit einer Kombination von SelectedIndexChanged / SelectedValueChanged Events und etwas Polymorphismus?


Sie könnten beide Strings verketten ("DegreesRadians") und über Reflection eine Methode namens "DegreesRadians" aufrufen:

MethodInfo theMethod = thisType.GetMethod(methodName);
theMethod.Invoke(this, parameters);

Wobei methodName die verketteten Strings sind (möglicherweise mit zusätzlichen Informationen, wie "convert" + unit1 + "2" + unit2, wie "convertDegrees2Radians"), und parameters ist ein Array, das beide Werte enthält.







combobox