VanDalkvist
3/19/2015 - 7:16 AM

Currency object

Currency object

public class Currency
{
    public static readonly Currency Usd = new Currency("usd");
    public static readonly Currency Eur = new Currency("eur");

    private Currency(string lang)
    {
        Name = lang;
    }

    public string Name { get; private set; }

    public static readonly List<Currency> All = new List<Currency> { Usd, Eur };

    public static implicit operator Currency(string lang)
    {
        var result = All.FirstOrDefault(l => string.Equals(l.Name, lang, StringComparison.OrdinalIgnoreCase));

        if (result == null)
            throw new ApplicationException(string.Format("Currency '{0}' is not supported", lang));

        return result;
    }

    public static implicit operator string(Currency lang)
    {
        return lang.Name;
    }

    public static bool TryParse(string name, out Currency value)
    {
        value = All.FirstOrDefault(languages => languages.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));

        return value != null;
    }

    public override string ToString()
    {
        return Name;
    }
}