{
[Serializable]
[CLSCompliant (false)]
+#if NET_2_0
+ [System.Runtime.InteropServices.ComVisible (true)]
+#endif
public struct UInt16 : IFormattable, IConvertible, IComparable
#if NET_2_0
, IComparable<UInt16>, IEquatable <UInt16>
}
#endif
- internal static bool Parse (string s, bool tryParse, out ushort result, out Exception exc)
- {
- ushort val = 0;
- int len;
- int i;
- bool digits_seen = false;
- bool has_negative_sign = false;
-
- result = 0;
- exc = null;
-
- if (s == null) {
- if (!tryParse)
- exc = new ArgumentNullException ("s");
- return false;
- }
-
- len = s.Length;
-
- char c;
- for (i = 0; i < len; i++) {
- c = s [i];
- if (!Char.IsWhiteSpace (c))
- break;
- }
-
- if (i == len) {
- if (!tryParse)
- exc = Int32.GetFormatException ();
- return false;
- }
-
- 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])) {
- if (!tryParse)
- exc = Int32.GetFormatException ();
- return false;
- }
- }
- break;
- }
- else {
- if (!tryParse)
- exc = Int32.GetFormatException ();
- return false;
- }
- }
- }
- if (!digits_seen) {
- if (!tryParse)
- exc = Int32.GetFormatException ();
- return false;
- }
-
- // -0 is legal but other negative values are not
- if (has_negative_sign && (val > 0)) {
- if (!tryParse)
- exc = new OverflowException (
- Locale.GetText ("Negative number"));
- return false;
- }
-
- result = val;
- return true;
- }
[CLSCompliant (false)]
public static ushort Parse (string s, IFormatProvider provider)
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)
{
- Exception exc;
- ushort res;
-
- if (!Parse (s, false, out res, out exc))
- throw exc;
-
- return res;
+ return Parse (s, NumberStyles.Number, null);
}
#if NET_2_0
[CLSCompliant(false)]
public static bool TryParse (string s, out ushort result)
{
- Exception exc;
- if (!Parse (s, true, out result, out exc)) {
- result = 0;
- return false;
- }
-
- return true;
+ return TryParse (s, NumberStyles.Integer, null, out result);
}
[CLSCompliant(false)]
if (!UInt32.TryParse (s, style, provider, out tmpResult))
return false;
- if (tmpResult > UInt16.MaxValue || tmpResult < UInt16.MinValue)
+ if (tmpResult > UInt16.MaxValue)
return false;
result = (ushort)tmpResult;