{
[Serializable]
[CLSCompliant (false)]
- public struct UInt16 : IComparable, IFormattable, IConvertible
+ [System.Runtime.InteropServices.ComVisible (true)]
+ public struct UInt16 : IFormattable, IConvertible, IComparable, IComparable<UInt16>, IEquatable <UInt16>
{
public const ushort MaxValue = 0xffff;
public const ushort MinValue = 0;
if(!(value is System.UInt16))
throw new ArgumentException (Locale.GetText ("Value is not a System.UInt16."));
- return this.m_value - ((ushort) value);
+ return CompareTo ((ushort) value);
}
public override bool Equals (object obj)
return m_value;
}
- [CLSCompliant(false)]
- public static ushort Parse (string s)
+ public int CompareTo (ushort value)
+ {
+ return m_value - value;
+ }
+
+ public bool Equals (ushort obj)
{
- ushort val = 0;
- int len;
- int i;
- bool digits_seen = false;
- bool has_negative_sign = false;
-
- if (s == null)
- throw new ArgumentNullException ("s");
-
- len = s.Length;
-
- char c;
- for (i = 0; i < len; i++) {
- c = s [i];
- if (!Char.IsWhiteSpace (c))
- break;
- }
-
- if (i == len)
- throw new FormatException ();
-
- if (s [i] == '+')
- i++;
- else
- if (s[i] == '-') {
- i++;
- has_negative_sign = true;
- }
-
- for (; i < len; i++) {
- c = s [i];
-
- if (c >= '0' && c <= '9') {
- ushort d = (ushort) (c - '0');
-
- val = checked ((ushort) (val * 10 + d));
- digits_seen = true;
- }
- else {
- if (Char.IsWhiteSpace (c)) {
- for (i++; i < len; i++) {
- if (!Char.IsWhiteSpace (s [i]))
- throw new FormatException ();
- }
- break;
- }
- else
- throw new FormatException ();
- }
- }
- if (!digits_seen)
- throw new FormatException ();
-
- // -0 is legal but other negative values are not
- if (has_negative_sign && (val > 0)) {
- throw new OverflowException (
- Locale.GetText ("Negative number"));
- }
-
- return val;
+ return obj == m_value;
}
[CLSCompliant (false)]
public static ushort Parse (string s, NumberStyles style, IFormatProvider provider)
{
uint tmpResult = UInt32.Parse (s, style, provider);
- if (tmpResult > UInt16.MaxValue || tmpResult < UInt16.MinValue)
- throw new OverflowException (Locale.GetText ("Value too large or too small."));
+ if (tmpResult > UInt16.MaxValue)
+ throw new OverflowException (Locale.GetText ("Value too large."));
return (ushort) tmpResult;
}
+ [CLSCompliant(false)]
+ public static ushort Parse (string s)
+ {
+ return Parse (s, NumberStyles.Number, null);
+ }
+
+ [CLSCompliant(false)]
+ public static bool TryParse (string s, out ushort result)
+ {
+ return TryParse (s, NumberStyles.Integer, null, out result);
+ }
+
+ [CLSCompliant(false)]
+ public static bool TryParse (string s, NumberStyles style, IFormatProvider provider, out ushort result)
+ {
+ uint tmpResult;
+ result = 0;
+
+ if (!UInt32.TryParse (s, style, provider, out tmpResult))
+ return false;
+
+ if (tmpResult > UInt16.MaxValue)
+ return false;
+
+ result = (ushort)tmpResult;
+ return true;
+ }
+
public override string ToString ()
{
- return ToString (null, null);
+ return NumberFormatter.NumberToString (m_value, null);
}
public string ToString (IFormatProvider provider)
{
- return ToString (null, provider);
+ return NumberFormatter.NumberToString (m_value, provider);
}
public string ToString (string format)
public string ToString (string format, IFormatProvider provider)
{
- NumberFormatInfo nfi = NumberFormatInfo.GetInstance (provider);
-
- // use "G" when format is null or String.Empty
- if ((format == null) || (format.Length == 0))
- format = "G";
-
- return IntegerFormatter.NumberToString (format, nfi, m_value);
+ return NumberFormatter.NumberToString (format, m_value, provider);
}
// =========== IConvertible Methods =========== //
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type conversionType, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, conversionType, provider);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
ushort IConvertible.ToUInt16 (IFormatProvider provider)