Конечно, полиморфизм. Каждый раз, когда вы видите длинные операторы switch или конструкции if / then / else, всегда можно обработать их, используя полиморфизм и фабрики. В вашем случае я бы предположил, что интерфейс ITemperaConConterter с конкретными реализациями для Фаренгейта, Селсиуса, Кельвина и Ранкина подойдет.
ОБНОВЛЕНИЕ:
Если вы обнаружите, что повторяете эту логику, почему бы не получить лучшую абстракцию для угла, чем для двойного?
Если вы пишете на объектно-ориентированном языке, неплохо подняться над примитивами (например, double и, yes, string), чтобы инкапсулировать поведение в объекты.
Я бы подумал о классе Angle, который будет зависеть от значения и возвращать его как любую меру, которую вы захотите.
Вот один из способов сделать это на Java. Я оставлю перевод на C #, а остальное для вас.
package angles;
public class Angle
{
private double value;
private AngleUnit units;
public Angle()
{
this(0.0, AngleUnit.RADIANS);
}
public Angle(double value)
{
this(value, AngleUnit.RADIANS);
}
public Angle(double value, AngleUnit units)
{
this.value = value;
this.units = units;
}
public double getValue()
{
return value;
}
public AngleUnit getUnits()
{
return units;
}
public Angle convert(AngleUnit newUnits)
{
Angle newAngle = null;
if (this.units.equals(newUnits))
{
return this;
}
return newAngle;
}
}
package angles;
public interface AngleConverter
{
Angle convert(Angle angle, AngleUnit to);
}
package angles;
public enum AngleUnit
{
DEGREES, RADIANS, GRADIANS;
}
package angles;
import java.util.HashMap;
import java.util.Map;
public class DegreeConverter implements AngleConverter
{
private final Map<AngleUnit, Double> factors;
public DegreeConverter(Map<AngleUnit, Double> factors)
{
this.factors = new HashMap<AngleUnit, Double>();
this.factors.put(AngleUnit.DEGREES, 1.0);
this.factors.put(AngleUnit.RADIANS, Math.PI/180.0);
this.factors.put(AngleUnit.GRADIANS, 100.0/90.);
}
public Angle convert(Angle angle, AngleUnit to)
{
assert angle != null && to != null;
return new Angle(angle.getValue()*this.factors.get(to), to);
}
}