【问题标题】:C# Double.TryParse equivalent on compact framework紧凑框架上的 C# Double.TryParse 等效项
【发布时间】:2014-07-29 11:32:24
【问题描述】:

我们想在 Win CE 5.0 驱动的设备上实现一个仅限货币输入的文本框 (###.00)。该应用程序正在使用 .NET Compact Framework 3.5 (C#) 开发。

有人建议我采用以下解决方案:

    private void textbox1_KeyDown(object sender, KeyEventArgs e)
    {
        double amount = 0.0d;
        if (double.TryParse(txtbox1.Text, NumberStyles.Currency, null, out amount))
        {
            textbox.Text = amount.ToString("C");
        }
    }

(Compact Framework 不支持Decimal.TryParse)?

【问题讨论】:

    标签: c# .net compact-framework tryparse


    【解决方案1】:

    Compact Framework 不支持 TryParse。

    您可以将其替换为:

        private void textbox1_KeyDown(object sender, KeyEventArgs e)
        {
            double amount = 0.0d;
    
            try
            {
                amount = Convert.ToDouble(txtbox1.Text);
                textbox.Text = amount.ToString("C");
            }
            catch
            {
    
            }          
        }
    

    或参考这篇博客,了解如何为 Compact Framework 实现 TryParse:https://web.archive.org/web/20160606182643/http://www.yortondotnet.com/2009/11/tryparse-for-compact-framework.html

    【讨论】:

      【解决方案2】:

      紧凑型框架的 TryParse

      /// <summary>
      /// Contains methods to assist with parsing one value into another.
      /// </summary>
      public static class ParseAssistant
      {
        #region TryParse Overloads
        /// <summary>
        /// Attempts to parse the string provided into an integer value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
      
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out int result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToInt32(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = int.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a byte value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out byte result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToByte(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = byte.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into an Int16 value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out Int16 result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToInt16(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = Int16.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into an Int64 value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out Int64 result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToInt64(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = Int64.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a decimal value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out decimal result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToDecimal(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = decimal.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a float value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out float result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = (float)Convert.ToDecimal(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = float.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a double value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out double result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToDouble(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = double.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into an sbyte value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out sbyte result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = (sbyte)Convert.ToInt32(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = sbyte.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a uint value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out uint result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = (uint)Convert.ToUInt64(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = uint.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a ulong value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out ulong result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = (ulong)Convert.ToUInt64(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = ulong.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into a ushort value. 
        /// </summary>
        /// <remarks>Returns 0 in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or zero if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out ushort result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = (ushort)Convert.ToUInt64(s);
                  retVal = true;
              }
              catch (FormatException) { result = 0; }
              catch (InvalidCastException) { result = 0; }
      #else
          retVal = ushort.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into an <see cref="System.DateTime"/> value. 
        /// </summary>
        /// <remarks>Returns <see cref="System.DateTime.MinValue"/> in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or <see cref="System.DateTime.MinValue"/> if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out DateTime result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToDateTime(s);
                  retVal = true;
              }
              catch (FormatException) { result = DateTime.MinValue; }
              catch (InvalidCastException) { result = DateTime.MinValue; }
      #else
          retVal = DateTime.TryParse(s, out result);
      #endif
          return retVal;
        }
        /// <summary>
        /// Attempts to parse the string provided into an integer value. 
        /// </summary>
        /// <remarks>Returns false in the result parameter if the parse fails.</remarks>
        /// <param name="s">The string to attempt to parse.</param>
        /// <param name="result">The result of the parsed string, or false if parsing failed.</param>
        /// <returns>A boolean value indicating whether or not the parse succeeded.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "s")]
        public static bool TryParse(string s, out bool result)
        {
          bool retVal = false;
      #if WindowsCE
              try
              {
                  result = Convert.ToBoolean(s);
                  retVal = true;
              }
              catch (FormatException) { result = false; }
              catch (InvalidCastException) { result = false; }
      #else
          retVal = bool.TryParse(s, out result);
      #endif
          return retVal;
        }
        #endregion
      }
      

      https://web.archive.org/web/20160606182643/http://www.yortondotnet.com/2009/11/tryparse-for-compact-framework.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        相关资源
        最近更新 更多