Wie erstelle ich eine generische Konverter für Maßeinheiten in C#?

Habe ich versucht zu lernen, ein wenig mehr über Delegaten und Lambda-Ausdrücke während der Arbeit auf einer kleinen cooking-Projekt beinhaltet, dass die Temperatur-Konvertierung wie auch einige Koch-Messung Konvertierungen, z.B. Metrische und ich habe versucht, zu denken, ein Weg, um eine erweiterbare Einheit-Konverter.

Hier ist, was ich mit gestartet, zusammen mit der code-Kommentare auf, was meine Pläne waren. Ich habe keinen plan, es zu benutzen, wie die unten, ich war einfach nur testen, einige features von C# weiß ich nicht sehr gut, ich bin auch unsicher, wie nehmen Sie diese weiter. Hat jemand irgendwelche Vorschläge auf, wie Sie schaffen, was ich spreche, in den Kommentaren unten? Dank

namespace TemperatureConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            //Fahrenheit to Celsius :  [°C] = ([°F] − 32) × 5⁄9
            var CelsiusResult = Converter.Convert(11M,Converter.FahrenheitToCelsius);

            //Celsius to Fahrenheit : [°F] = [°C] × 9⁄5 + 32
            var FahrenheitResult = Converter.Convert(11M, Converter.CelsiusToFahrenheit);

            Console.WriteLine("Fahrenheit to Celsius : " + CelsiusResult);
            Console.WriteLine("Celsius to Fahrenheit : " + FahrenheitResult);
            Console.ReadLine();

            //If I wanted to add another unit of temperature i.e. Kelvin 
            //then I would need calculations for Kelvin to Celsius, Celsius to Kelvin, Kelvin to Fahrenheit, Fahrenheit to Kelvin
            //Celsius to Kelvin : [K] = [°C] + 273.15
            //Kelvin to Celsius : [°C] = [K] − 273.15
            //Fahrenheit to Kelvin : [K] = ([°F] + 459.67) × 5⁄9
            //Kelvin to Fahrenheit : [°F] = [K] × 9⁄5 − 459.67
            //The plan is to have the converters with a single purpose to convert to
            //one particular unit type e.g. Celsius and create separate unit converters 
            //that contain a list of calculations that take one specified unit type and then convert to their particular unit type, in this example its Celsius.
        }
    }

    //at the moment this is a static class but I am looking to turn this into an interface or abstract class
    //so that whatever implements this interface would be supplied with a list of generic deligate conversions
    //that it can invoke and you can extend by adding more when required.
    public static class Converter
    {
        public static Func<decimal, decimal> CelsiusToFahrenheit = x => (x * (9M / 5M)) + 32M;
        public static Func<decimal, decimal> FahrenheitToCelsius = x => (x - 32M) * (5M / 9M);

        public static decimal Convert(decimal valueToConvert, Func<decimal, decimal> conversion) {
            return conversion.Invoke(valueToConvert);
        }
    }
}

Update: Versuchen zu klären, meine Frage:

Verwendung nur meine Temperatur Beispiel unten, wie würde ich eine Klasse erstellen, die enthält eine Liste der lambda-Konversionen zu Celsius, die Sie dann weitergeben einer bestimmten Temperatur und es wird versuchen, und konvertieren, dass zu Celsius (wenn die Berechnung vorhanden ist)

Beispiel pseudo-code:

enum Temperature
{
    Celcius,
    Fahrenheit,
    Kelvin
}

UnitConverter CelsiusConverter = new UnitConverter(Temperature.Celsius);
CelsiusConverter.AddCalc("FahrenheitToCelsius", lambda here);
CelsiusConverter.Convert(Temperature.Fahrenheit, 11);
  • Mengeneinheiten werden unterstützt in F# und ich denke, es kann eine gute Funktion für C# vNext. Für jetzt habe ich dieses Projekt gefunden QuantityTypes, die Maßeinheiten in C#.
InformationsquelleAutor Pricey | 2011-10-21
Schreibe einen Kommentar