Beispiel #1
0
        /// <summary>Converts the string to
        /// A return value indicates whether the conversion succeeded.
        /// </summary>
        /// <param name="s">
        /// A string containing Money to convert.
        /// </param>
        /// <param name="formatProvider">
        /// The specified format provider.
        /// </param>
        /// <param name="result">
        /// The result of the parsing.
        /// </param>
        /// <returns>
        /// True if the string was converted successfully, otherwise false.
        /// </returns>
        public static bool TryParse(string s, IFormatProvider formatProvider, out Money result)
        {
            result = Zero;
            if (string.IsNullOrEmpty(s))
            {
                return(false);
            }

            string s_num;
            string s_cur;

            var culture = formatProvider as CultureInfo ?? CultureInfo.InvariantCulture;

            var buffer = new List <char>(s.Length);
            var min    = culture.NumberFormat.NegativeSign[0];
            var pls    = culture.NumberFormat.PositiveSign[0];

            foreach (var ch in s)
            {
                if (ch == min || ch == pls || (ch >= '0' && ch <= '9'))
                {
                    break;
                }
                buffer.Add(ch);
            }
            if (buffer.Count > 0)
            {
                s_num = s.Substring(buffer.Count);
                s_cur = new string(buffer.ToArray());
            }
            else
            {
                for (var pos = s.Length - 1; pos >= 0; pos--)
                {
                    var ch = s[pos];
                    if (ch == min || ch == pls || (ch >= '0' && ch <= '9'))
                    {
                        break;
                    }
                    buffer.Insert(0, ch);
                }

                s_num = s.Substring(0, s.Length - buffer.Count);
                s_cur = new string(buffer.ToArray());
            }

            Currency currency = Currency.Empty;
            decimal  value;

            if ((s_cur == "" || Currency.TryParse(s_cur, out currency)) &&
                decimal.TryParse(s_num, NumberStyles.Number, GetNumberFormatInfo(formatProvider), out value))
            {
                result = Create(value, currency);
                return(true);
            }
            return(false);
        }