5 // Derek Holden (dholden@draper.com)
\r
6 // Duncan Mak (duncan@ximian.com)
\r
8 // (C) Ximian, Inc. http://www.ximian.com
\r
12 // System.Convert class. This was written word for word off the
\r
13 // Library specification for System.Convert in the ECMA TC39 TG2
\r
14 // and TG3 working documents. The first page of which has a table
\r
15 // for all legal conversion scenerios.
\r
17 // This header and the one above it can be formatted however, just trying
\r
18 // to keep it consistent w/ the existing mcs headers.
\r
20 // This Convert class could be written another way, with each type
\r
21 // implementing IConvertible and defining their own conversion functions,
\r
22 // and this class just calling the type's implementation. Or, they can
\r
23 // be defined here and the implementing type can use these functions when
\r
24 // defining their IConvertible interface. Byte's ToBoolean() calls
\r
25 // Convert.ToBoolean(byte), or Convert.ToBoolean(byte) calls
\r
26 // byte.ToBoolean(). The first case is what is done here.
\r
28 // See http://lists.ximian.com/archives/public/mono-list/2001-July/000525.html
\r
30 // There are also conversion functions that are not defined in
\r
31 // the ECMA draft, such as there is no bool ToBoolean(DateTime value),
\r
32 // and placing that somewhere won't compile w/ this Convert since the
\r
33 // function doesn't exist. However calling that when using Microsoft's
\r
34 // System.Convert doesn't produce any compiler errors, it just throws
\r
35 // an InvalidCastException at runtime.
\r
37 // Whenever a decimal, double, or single is converted to an integer
\r
38 // based type, it is even rounded. This uses Math.Round which only
\r
39 // has Round(decimal) and Round(double), so in the Convert from
\r
40 // single cases the value is passed to Math as a double. This
\r
41 // may not be completely necessary.
\r
43 // The .NET Framework SDK lists DBNull as a member of this class
\r
44 // as 'public static readonly object DBNull;'.
\r
46 // It should also be decided if all the cast return values should be
\r
47 // returned as unchecked or not.
\r
49 // All the XML function comments were auto generated which is why they
\r
50 // sound someone redundant.
\r
52 // TYPE | BOOL BYTE CHAR DT DEC DBL I16 I32 I64 SBYT SNGL STR UI16 UI32 UI64
\r
53 // -----+--------------------------------------------------------------------
\r
54 // BOOL | X X X X X X X X X X X X X
\r
55 // BYTE | X X X X X X X X X X X X X X
\r
56 // CHAR | X X X X X X X X X X
\r
58 // DEC | X X X X X X X X X X X X X
\r
59 // DBL | X X X X X X X X X X X X X
\r
60 // I16 | X X X X X X X X X X X X X X
\r
61 // I32 | X X X X X X X X X X X X X X
\r
62 // I64 | X X X X X X X X X X X X X X
\r
63 // SBYT | X X X X X X X X X X X X X X
\r
64 // SNGL | X X X X X X X X X X X X X
\r
65 // STR | X X X X X X X X X X X X X X X
\r
66 // UI16 | X X X X X X X X X X X X X X
\r
67 // UI32 | X X X X X X X X X X X X X X
\r
68 // UI64 | X X X X X X X X X X X X X X
\r
71 using System.Globalization;
\r
72 using System.Security.Cryptography;
\r
77 [CLSCompliant(false)]
\r
78 public sealed class Convert {
\r
81 public static readonly object DBNull;
\r
85 // ========== BASE 64 Conversions ========== //
\r
86 // the BASE64 convert methods are using the Base64 converting methods
\r
87 // from System.Security.Cryptography.ToBase64Transform and
\r
88 // System.Security.Cryptography.FromBase64Transform
\r
90 // should be changed to a stand-alone class Base64Encoder & Base64Decoder
\r
92 public static byte[] FromBase64CharArray(char[] inArray, int offset, int length)
\r
94 if (inArray == null)
\r
95 throw new ArgumentNullException();
\r
97 int len = inArray.Length;
\r
98 if (len < 4 || len % 4 != 0)
\r
99 throw new FormatException();
\r
101 byte[] inArr = new System.Text.UnicodeEncoding().GetBytes(inArray);
\r
102 FromBase64Transform t = new FromBase64Transform();
\r
104 return t.TransformFinalBlock(inArr, 0, inArr.Length);
\r
107 public static byte[] FromBase64String(string s)
\r
110 throw new ArgumentNullException();
\r
112 char[] inArr = s.ToCharArray();
\r
114 return FromBase64CharArray(inArr, 0, inArr.Length);
\r
117 public static TypeCode GetTypeCode (object value)
\r
120 return TypeCode.Empty;
\r
122 return Type.GetTypeCode (value.GetType ());
\r
125 public static bool IsDBNull (object value)
\r
127 TypeCode tc = Type.GetTypeCode (value.GetType ());
\r
129 if (tc == TypeCode.DBNull)
\r
135 public static int ToBase64CharArray(byte[] inArray, int offsetIn, int length,
\r
136 char[] outArray, int offsetOut)
\r
138 if (inArray == null || outArray == null)
\r
139 throw new ArgumentNullException();
\r
141 if (offsetIn < 0 || length < 0 || offsetOut < 0 || (offsetIn + length) > inArray.Length)
\r
142 throw new ArgumentOutOfRangeException();
\r
144 ToBase64Transform t = new ToBase64Transform();
\r
145 byte[] outArr = t.TransformFinalBlock(inArray, offsetIn, length);
\r
147 char[] cOutArr = new System.Text.ASCIIEncoding().GetChars(outArr);
\r
149 if ((offsetOut + cOutArr.Length) > outArray.Length)
\r
150 throw new ArgumentOutOfRangeException();
\r
152 Array.Copy(cOutArr, 0, outArray, offsetOut, cOutArr.Length);
\r
154 return cOutArr.Length;
\r
157 public static string ToBase64String(byte[] inArray)
\r
159 if (inArray == null)
\r
160 throw new ArgumentNullException();
\r
162 return ToBase64String(inArray, 0, inArray.Length);
\r
165 public static string ToBase64String(byte[] inArray, int offset, int length)
\r
167 if (inArray == null)
\r
168 throw new ArgumentNullException();
\r
170 if (offset < 0 || length < 0 || (offset + length) > inArray.Length)
\r
171 throw new ArgumentOutOfRangeException();
\r
173 // FIXME: change to stand alone Base64 Encoder class
\r
174 ToBase64Transform t = new ToBase64Transform();
\r
175 byte[] outArr = t.TransformFinalBlock(inArray, offset, length);
\r
177 return (new System.Text.ASCIIEncoding().GetString(outArr));
\r
180 // ========== Boolean Conversions ========== //
\r
182 public static bool ToBoolean (bool value)
\r
187 public static bool ToBoolean (byte value)
\r
189 return (value != 0);
\r
192 public static bool ToBoolean (char value)
\r
194 throw new InvalidCastException (Locale.GetText ("Can't convert char to bool"));
\r
197 public static bool ToBoolean (DateTime value)
\r
199 throw new InvalidCastException (Locale.GetText ("Can't convert date to bool"));
\r
202 public static bool ToBoolean (decimal value)
\r
204 return (value != 0M);
\r
207 public static bool ToBoolean (double value)
\r
209 return (value != 0);
\r
212 public static bool ToBoolean (float value)
\r
214 return (value != 0f);
\r
217 public static bool ToBoolean (int value)
\r
219 return (value != 0);
\r
222 public static bool ToBoolean (long value)
\r
224 return (value != 0);
\r
227 public static bool ToBoolean (sbyte value)
\r
229 return (value != 0);
\r
232 public static bool ToBoolean (short value)
\r
234 return (value != 0);
\r
237 public static bool ToBoolean (string value)
\r
239 return Boolean.Parse (value);
\r
242 public static bool ToBoolean (string value, IFormatProvider provider)
\r
244 return Boolean.Parse (value); // provider is ignored.
\r
247 public static bool ToBoolean (uint value)
\r
249 return (value != 0);
\r
252 public static bool ToBoolean (ulong value)
\r
254 return (value != 0);
\r
257 public static bool ToBoolean (ushort value)
\r
259 return (value != 0);
\r
262 public static bool ToBoolean (object value)
\r
264 return ToBoolean (value, null);
267 public static bool ToBoolean (object value, IFormatProvider provider)
\r
271 return ((IConvertible) value).ToBoolean (provider);
274 // ========== Byte Conversions ========== //
\r
276 public static byte ToByte (bool value)
\r
278 return (byte)(value ? 1 : 0);
\r
281 public static byte ToByte (byte value)
\r
286 public static byte ToByte (char value)
\r
288 if (value > Byte.MaxValue)
\r
289 throw new OverflowException (Locale.GetText (
\r
290 "Value is greater than Byte.MaxValue"));
\r
292 return (byte)value;
\r
295 public static byte ToByte (DateTime value)
\r
297 throw new InvalidCastException ("This conversion is not supported.");
\r
300 public static byte ToByte (decimal value)
\r
302 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
303 throw new OverflowException (Locale.GetText (
\r
304 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
306 // Returned Even-Rounded
\r
307 return (byte)(Math.Round (value));
\r
310 public static byte ToByte (double value)
\r
312 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
313 throw new OverflowException (Locale.GetText (
\r
314 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
316 // This and the float version of ToByte are the only ones
\r
317 // the spec listed as checking for .NaN and Infinity overflow
\r
318 if (Double.IsNaN(value) || Double.IsInfinity(value))
\r
319 throw new OverflowException (Locale.GetText (
\r
320 "Value is equal to Double.NaN, Double.PositiveInfinity, or Double.NegativeInfinity"));
\r
322 // Returned Even-Rounded
\r
323 return (byte)(Math.Round (value));
\r
326 public static byte ToByte (float value)
\r
328 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
329 throw new OverflowException (Locale.GetText (
\r
330 "Value is greater than Byte.MaxValue or less than Byte.Minalue"));
\r
332 // This and the double version of ToByte are the only ones
\r
333 // the spec listed as checking for .NaN and Infinity overflow
\r
334 if (Single.IsNaN(value) || Single.IsInfinity(value))
\r
335 throw new OverflowException (Locale.GetText (
\r
336 "Value is equal to Single.NaN, Single.PositiveInfinity, or Single.NegativeInfinity"));
\r
338 // Returned Even-Rounded, pass it as a double, could have this
\r
339 // method just call Convert.ToByte ( (double)value)
\r
340 return (byte)(Math.Round ( (double)value));
\r
343 public static byte ToByte (int value)
\r
345 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
346 throw new OverflowException (Locale.GetText (
\r
347 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
349 return (byte)value;
\r
352 public static byte ToByte (long value)
\r
354 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
355 throw new OverflowException (Locale.GetText (
\r
356 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
358 return (byte)value;
\r
361 public static byte ToByte (sbyte value)
\r
363 if (value < Byte.MinValue)
\r
364 throw new OverflowException (Locale.GetText (
\r
365 "Value is less than Byte.MinValue"));
\r
367 return (byte)value;
\r
370 public static byte ToByte (short value)
\r
372 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
373 throw new OverflowException (Locale.GetText (
\r
374 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
376 return (byte)value;
\r
379 public static byte ToByte (string value)
\r
381 return Byte.Parse (value);
\r
384 public static byte ToByte (string value, IFormatProvider provider)
\r
386 return Byte.Parse (value, provider);
\r
389 public static byte ToByte (string value, int fromBase)
\r
391 return (byte) ConvertFromBase (value, fromBase);
\r
394 public static byte ToByte (uint value)
\r
396 if (value > Byte.MaxValue)
\r
397 throw new OverflowException (Locale.GetText (
\r
398 "Value is greater than Byte.MaxValue"));
\r
400 return (byte)value;
\r
403 public static byte ToByte (ulong value)
\r
405 if (value > Byte.MaxValue)
\r
406 throw new OverflowException (Locale.GetText (
\r
407 "Value is greater than Byte.MaxValue"));
\r
409 return (byte)value;
\r
412 public static byte ToByte (ushort value)
\r
414 if (value > Byte.MaxValue)
\r
415 throw new OverflowException (Locale.GetText (
\r
416 "Value is greater than Byte.MaxValue"));
\r
418 return (byte)value;
\r
421 public static byte ToByte (object value)
\r
423 return ToByte (value, null);
426 public static byte ToByte (object value, IFormatProvider provider)
\r
430 return ((IConvertible) value).ToByte (provider);
433 // ========== Char Conversions ========== //
\r
435 public static char ToChar (bool value)
\r
437 throw new InvalidCastException ("This conversion is not supported.");
\r
440 public static char ToChar (byte value)
\r
442 return (char)value;
\r
445 public static char ToChar (char value)
\r
450 public static char ToChar (DateTime value)
\r
452 throw new InvalidCastException ("This conversion is not supported.");
\r
455 public static char ToChar (decimal value)
\r
457 throw new InvalidCastException ("This conversion is not supported.");
\r
460 public static char ToChar (double value)
\r
462 throw new InvalidCastException ("This conversion is not supported.");
\r
465 public static char ToChar (int value)
\r
467 if (value > Char.MaxValue || value < Char.MinValue)
\r
468 throw new OverflowException (Locale.GetText (
\r
469 "Value is greater than Char.MaxValue or less than Char.MinValue"));
\r
471 return (char)value;
\r
474 public static char ToChar (long value)
\r
476 if (value > Char.MaxValue || value < Char.MinValue)
\r
477 throw new OverflowException (Locale.GetText (
\r
478 "Value is greater than Char.MaxValue or less than Char.MinValue"));
\r
480 return (char)value;
\r
483 public static char ToChar (float value)
\r
485 throw new InvalidCastException ("This conversion is not supported.");
\r
488 public static char ToChar (sbyte value)
\r
490 if (value < Char.MinValue)
\r
491 throw new OverflowException (Locale.GetText (
\r
492 "Value is less than Char.MinValue"));
\r
494 return (char)value;
\r
497 public static char ToChar (short value)
\r
499 if (value < Char.MinValue)
\r
500 throw new OverflowException (Locale.GetText (
\r
501 "Value is less than Char.MinValue"));
\r
503 return (char)value;
\r
506 public static char ToChar (string value)
\r
508 return Char.Parse (value);
\r
511 public static char ToChar (string value, IFormatProvider provider)
\r
513 return Char.Parse (value); // provider is ignored.
\r
516 public static char ToChar (uint value)
\r
518 if (value > Char.MaxValue)
\r
519 throw new OverflowException (Locale.GetText (
\r
520 "Value is greater than Char.MaxValue"));
\r
522 return (char)value;
\r
525 public static char ToChar (ulong value)
\r
527 if (value > Char.MaxValue)
\r
528 throw new OverflowException (Locale.GetText (
\r
529 "Value is greater than Char.MaxValue"));
\r
531 return (char)value;
\r
534 public static char ToChar (ushort value)
\r
536 if (value > Char.MaxValue)
\r
537 throw new OverflowException (Locale.GetText (
\r
538 "Value is greater than Char.MaxValue"));
\r
540 return (char)value;
\r
543 public static char ToChar (object value)
\r
545 return ToChar (value, null);
548 public static char ToChar (object value, IFormatProvider provider)
\r
552 return ((IConvertible) value).ToChar (provider);
555 // ========== DateTime Conversions ========== //
\r
557 public static DateTime ToDateTime (string value)
\r
559 return DateTime.Parse (value);
\r
562 public static DateTime ToDateTime (string value, IFormatProvider provider)
\r
564 return DateTime.Parse (value, provider);
\r
567 public static DateTime ToDateTime (bool value)
\r
569 throw new InvalidCastException ("This conversion is not supported.");
\r
572 public static DateTime ToDateTime (byte value)
\r
574 throw new InvalidCastException ("This conversion is not supported.");
\r
577 public static DateTime ToDateTime (char value)
\r
579 throw new InvalidCastException ("This conversion is not supported.");
\r
582 public static DateTime ToDateTime (DateTime value)
\r
587 public static DateTime ToDateTime (decimal value)
\r
589 throw new InvalidCastException ("This conversion is not supported.");
\r
592 public static DateTime ToDateTime (double value)
\r
594 throw new InvalidCastException ("This conversion is not supported.");
\r
597 public static DateTime ToDateTime (short value)
\r
599 throw new InvalidCastException ("This conversion is not supported.");
\r
602 public static DateTime ToDateTime (int value)
\r
604 throw new InvalidCastException ("This conversion is not supported.");
\r
607 public static DateTime ToDateTime (long value)
\r
609 throw new InvalidCastException ("This conversion is not supported.");
\r
612 public static DateTime ToDateTime (float value)
\r
614 throw new InvalidCastException ("This conversion is not supported.");
\r
617 public static DateTime ToDateTime (object value)
\r
619 return ToDateTime (value, null);
622 public static DateTime ToDateTime (object value, IFormatProvider provider)
\r
625 return DateTime.MinValue;
626 return ((IConvertible) value).ToDateTime (provider);
629 [CLSCompliant (false)]
\r
630 public static DateTime ToDateTime (sbyte value)
\r
632 throw new InvalidCastException ("This conversion is not supported.");
\r
634 [CLSCompliant (false)]
\r
635 public static DateTime ToDateTime (ushort value)
\r
637 throw new InvalidCastException ("This conversion is not supported.");
\r
640 [CLSCompliant (false)]
\r
641 public static DateTime ToDateTime (uint value)
\r
643 throw new InvalidCastException ("This conversion is not supported.");
\r
646 [CLSCompliant (false)]
\r
647 public static DateTime ToDateTime (ulong value)
\r
649 throw new InvalidCastException ("This conversion is not supported.");
\r
652 // ========== Decimal Conversions ========== //
\r
654 public static decimal ToDecimal (bool value)
\r
656 return value ? 1 : 0;
\r
659 public static decimal ToDecimal (byte value)
\r
661 return (decimal)value;
\r
664 public static decimal ToDecimal (char value)
\r
666 throw new InvalidCastException ("This conversion is not supported.");
\r
669 public static decimal ToDecimal (DateTime value)
\r
671 throw new InvalidCastException ("This conversion is not supported.");
\r
674 public static decimal ToDecimal (decimal value)
\r
679 public static decimal ToDecimal (double value)
\r
681 if (value > (double)Decimal.MaxValue || value < (double)Decimal.MinValue)
\r
682 throw new OverflowException (Locale.GetText (
\r
683 "Value is greater than Decimal.MaxValue or less than Decimal.MinValue"));
\r
685 return (decimal)value;
\r
688 public static decimal ToDecimal (float value)
\r
690 return (decimal) Math.Round (value);
\r
693 public static decimal ToDecimal (int value)
\r
695 return (decimal)value;
\r
698 public static decimal ToDecimal (long value)
\r
700 return (decimal)value;
\r
703 [CLSCompliant (false)]
\r
704 public static decimal ToDecimal (sbyte value)
\r
706 return (decimal)value;
\r
709 public static decimal ToDecimal (short value)
\r
711 return (decimal)value;
\r
714 public static decimal ToDecimal (string value)
\r
716 return Decimal.Parse (value);
\r
719 public static decimal ToDecimal (string value, IFormatProvider provider)
\r
721 return Decimal.Parse (value, provider);
\r
724 [CLSCompliant (false)]
\r
725 public static decimal ToDecimal (uint value)
\r
727 return (decimal)value;
\r
730 [CLSCompliant (false)]
\r
731 public static decimal ToDecimal (ulong value)
\r
733 return (decimal)value;
\r
736 [CLSCompliant (false)]
\r
737 public static decimal ToDecimal (ushort value)
\r
739 return (decimal)value;
\r
742 public static decimal ToDecimal (object value)
\r
744 return ToDecimal (value, null);
747 public static decimal ToDecimal (object value, IFormatProvider provider)
\r
750 return new Decimal (0);
751 return ((IConvertible) value).ToDecimal (provider);
755 // ========== Double Conversions ========== //
\r
757 public static double ToDouble (bool value)
\r
759 return value ? 1 : 0;
\r
762 public static double ToDouble (byte value)
\r
764 throw new InvalidCastException ("This conversion is not supported.");
\r
767 public static double ToDouble (char value)
\r
769 throw new InvalidCastException ("This conversion is not supported.");
\r
772 public static double ToDouble (DateTime value)
\r
774 throw new InvalidCastException ("This conversion is not supported.");
\r
777 public static double ToDouble (decimal value)
\r
779 return (double)value;
\r
782 public static double ToDouble (double value)
\r
787 public static double ToDouble (float value)
\r
789 return (double) Math.Round (value);
\r
792 public static double ToDouble (int value)
\r
794 return (double)value;
\r
797 public static double ToDouble (long value)
\r
799 return (double)value;
\r
802 [CLSCompliant (false)]
\r
803 public static double ToDouble (sbyte value)
\r
805 return (double)value;
\r
808 public static double ToDouble (short value)
\r
810 return (double)value;
\r
813 public static double ToDouble (string value)
\r
815 return Double.Parse (value);
\r
818 public static double ToDouble (string value, IFormatProvider provider)
\r
820 return Double.Parse (value, provider);
\r
823 [CLSCompliant (false)]
\r
824 public static double ToDouble (uint value)
\r
826 return (double)value;
\r
829 [CLSCompliant (false)]
\r
830 public static double ToDouble (ulong value)
\r
832 return (double)value;
\r
835 [CLSCompliant (false)]
\r
836 public static double ToDouble (ushort value)
\r
838 return (double)value;
\r
841 public static double ToDouble (object value)
\r
843 return ToDouble (value, null);
846 public static double ToDouble (object value, IFormatProvider provider)
\r
850 return ((IConvertible) value).ToDouble (provider);
853 // ========== Int16 Conversions ========== //
\r
855 public static short ToInt16 (bool value)
\r
857 return (short)(value ? 1 : 0);
\r
860 public static short ToInt16 (byte value)
\r
862 return (short)value;
\r
865 public static short ToInt16 (char value)
\r
867 if (value > Int16.MaxValue)
\r
868 throw new OverflowException (Locale.GetText (
\r
869 "Value is greater than Int16.MaxValue"));
\r
871 return (short)value;
\r
874 public static short ToInt16 (DateTime value)
\r
876 throw new InvalidCastException ("This conversion is not supported.");
\r
879 public static short ToInt16 (decimal value)
\r
881 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
882 throw new OverflowException (Locale.GetText (
\r
883 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
885 // Returned Even-Rounded
\r
886 return (short)(Math.Round (value));
\r
889 public static short ToInt16 (double value)
\r
891 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
892 throw new OverflowException (Locale.GetText (
\r
893 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
895 // Returned Even-Rounded
\r
896 return (short)(Math.Round (value));
\r
899 public static short ToInt16 (float value)
\r
901 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
902 throw new OverflowException (Locale.GetText (
\r
903 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
905 // Returned Even-Rounded, use Math.Round pass as a double.
\r
906 return (short)Math.Round ( (double)value);
\r
909 public static short ToInt16 (int value)
\r
911 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
912 throw new OverflowException (Locale.GetText (
\r
913 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
915 return (short)value;
\r
918 public static short ToInt16 (long value)
\r
920 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
921 throw new OverflowException (Locale.GetText (
\r
922 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
924 return (short)value;
\r
927 [CLSCompliant (false)]
\r
928 public static short ToInt16 (sbyte value)
\r
930 return (short)value;
\r
933 public static short ToInt16 (short value)
\r
938 public static short ToInt16 (string value)
\r
940 return Int16.Parse (value);
\r
943 public static short ToInt16 (string value, IFormatProvider provider)
\r
945 return Int16.Parse (value, provider);
\r
949 public static short ToInt16 (string value, int fromBase)
\r
951 return (short) ConvertFromBase (value, fromBase);
\r
954 [CLSCompliant (false)]
\r
955 public static short ToInt16 (uint value)
\r
957 if (value > Int16.MaxValue)
\r
958 throw new OverflowException (Locale.GetText (
\r
959 "Value is greater than Int16.MaxValue"));
\r
961 return (short)value;
\r
964 [CLSCompliant (false)]
\r
965 public static short ToInt16 (ulong value)
\r
967 if (value > (ulong)Int16.MaxValue)
\r
968 throw new OverflowException (Locale.GetText (
\r
969 "Value is greater than Int16.MaxValue"));
\r
970 return (short)value;
\r
973 [CLSCompliant (false)]
\r
974 public static short ToInt16 (ushort value)
\r
976 if (value > Int16.MaxValue)
\r
977 throw new OverflowException (Locale.GetText (
\r
978 "Value is greater than Int16.MaxValue"));
\r
980 return (short)value;
\r
983 public static short ToInt16 (object value)
\r
985 return ToInt16 (value, null);
988 public static short ToInt16 (object value, IFormatProvider provider)
\r
992 return ((IConvertible) value).ToInt16 (provider);
995 // ========== Int32 Conversions ========== //
\r
997 public static int ToInt32 (bool value)
\r
999 return value ? 1 : 0;
\r
1002 public static int ToInt32 (byte value)
\r
1004 return (int)value;
\r
1007 public static int ToInt32 (char value)
\r
1009 return (int)value;
\r
1012 public static int ToInt32 (DateTime value)
\r
1014 throw new InvalidCastException ("This conversion is not supported.");
\r
1017 public static int ToInt32 (decimal value)
\r
1019 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1020 throw new OverflowException (Locale.GetText (
\r
1021 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1023 // Returned Even-Rounded
\r
1024 return (int)(Math.Round (value));
\r
1027 public static int ToInt32 (double value)
\r
1029 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1030 throw new OverflowException (Locale.GetText (
\r
1031 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1033 // Returned Even-Rounded
\r
1034 return (int)(Math.Round (value));
\r
1037 public static int ToInt32 (float value)
\r
1039 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1040 throw new OverflowException (Locale.GetText (
\r
1041 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1043 // Returned Even-Rounded, pass as a double, could just call
\r
1044 // Convert.ToInt32 ( (double)value);
\r
1045 return (int)(Math.Round ( (double)value));
\r
1048 public static int ToInt32 (int value)
\r
1053 public static int ToInt32 (long value)
\r
1055 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1056 throw new OverflowException (Locale.GetText (
\r
1057 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1059 return (int)value;
\r
1062 [CLSCompliant (false)]
\r
1063 public static int ToInt32 (sbyte value)
\r
1065 return (int)value;
\r
1068 public static int ToInt32 (short value)
\r
1070 return (int)value;
\r
1073 public static int ToInt32 (string value)
\r
1075 return Int32.Parse (value);
\r
1078 public static int ToInt32 (string value, IFormatProvider provider)
\r
1080 return Int32.Parse (value, provider);
\r
1084 public static int ToInt32 (string value, int fromBase)
\r
1086 return ConvertFromBase (value, fromBase);
\r
1089 [CLSCompliant (false)]
\r
1090 public static int ToInt32 (uint value)
\r
1092 if (value > Int32.MaxValue)
\r
1093 throw new OverflowException (Locale.GetText (
\r
1094 "Value is greater than Int32.MaxValue"));
\r
1096 return (int)value;
\r
1099 [CLSCompliant (false)]
\r
1100 public static int ToInt32 (ulong value)
\r
1102 if (value > Int32.MaxValue)
\r
1103 throw new OverflowException (Locale.GetText (
\r
1104 "Value is greater than Int32.MaxValue"));
\r
1106 return (int)value;
\r
1109 [CLSCompliant (false)]
\r
1110 public static int ToInt32 (ushort value)
\r
1112 return (int)value;
\r
1115 public static int ToInt32 (object value)
\r
1117 return ToInt32 (value, null);
1120 public static int ToInt32 (object value, IFormatProvider provider)
\r
1124 return ((IConvertible) value).ToInt32 (provider);
1127 // ========== Int64 Conversions ========== //
\r
1129 public static long ToInt64 (bool value)
\r
1131 return value ? 1 : 0;
\r
1134 public static long ToInt64 (byte value)
\r
1136 return (long)(ulong)value;
\r
1139 public static long ToInt64 (char value)
\r
1141 return (long)value;
\r
1144 public static long ToInt64 (DateTime value)
\r
1146 throw new InvalidCastException ("This conversion is not supported.");
\r
1149 public static long ToInt64 (decimal value)
\r
1151 if (value > Int64.MaxValue || value < Int64.MinValue)
\r
1152 throw new OverflowException (Locale.GetText (
\r
1153 "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
\r
1155 // Returned Even-Rounded
\r
1156 return (long)(Math.Round (value));
\r
1159 public static long ToInt64 (double value)
\r
1161 if (value > Int64.MaxValue || value < Int64.MinValue)
\r
1162 throw new OverflowException (Locale.GetText (
\r
1163 "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
\r
1165 // Returned Even-Rounded
\r
1166 return (long)(Math.Round (value));
\r
1169 public static long ToInt64 (float value)
\r
1171 if (value > Int64.MaxValue || value < Int64.MinValue)
\r
1172 throw new OverflowException (Locale.GetText (
\r
1173 "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
\r
1175 // Returned Even-Rounded, pass to Math as a double, could
\r
1176 // just call Convert.ToInt64 ( (double)value);
\r
1177 return (long)(Math.Round ( (double)value));
\r
1180 public static long ToInt64 (int value)
\r
1182 return (long)value;
\r
1185 public static long ToInt64 (long value)
\r
1190 [CLSCompliant (false)]
\r
1191 public static long ToInt64 (sbyte value)
\r
1193 return (long)value;
\r
1196 public static long ToInt64 (short value)
\r
1198 return (long)value;
\r
1201 public static long ToInt64 (string value)
\r
1203 return Int64.Parse (value);
\r
1206 public static long ToInt64 (string value, IFormatProvider provider)
\r
1208 return Int64.Parse (value, provider);
\r
1211 public static long ToInt64 (string value, int fromBase)
\r
1213 if (NotValidBase (fromBase))
\r
1214 throw new ArgumentException ("fromBase is not valid.");
\r
1216 return (long) ConvertFromBase (value, fromBase);
\r
1219 [CLSCompliant (false)]
\r
1220 public static long ToInt64 (uint value)
\r
1222 return (long)(ulong)value;
\r
1225 [CLSCompliant (false)]
\r
1226 public static long ToInt64 (ulong value)
\r
1228 if (value > Int64.MaxValue)
\r
1229 throw new OverflowException (Locale.GetText (
\r
1230 "Value is greater than Int64.MaxValue"));
\r
1232 return (long)value;
\r
1235 [CLSCompliant (false)]
\r
1236 public static long ToInt64 (ushort value)
\r
1238 return (long)(ulong)value;
\r
1241 public static long ToInt64 (object value)
\r
1243 return ToInt64 (value, null);
1246 public static long ToInt64 (object value, IFormatProvider provider)
\r
1250 return ((IConvertible) value).ToInt64 (provider);
1253 // ========== SByte Conversions ========== //
\r
1255 [CLSCompliant (false)]
\r
1256 public static sbyte ToSByte (bool value)
\r
1258 return (sbyte)(value ? 1 : 0);
\r
1261 [CLSCompliant (false)]
\r
1262 public static sbyte ToSByte (byte value)
\r
1264 if (value > SByte.MaxValue)
\r
1265 throw new OverflowException (Locale.GetText (
\r
1266 "Value is greater than SByte.MaxValue"));
\r
1268 return (sbyte)value;
\r
1271 [CLSCompliant (false)]
\r
1272 public static sbyte ToSByte (char value)
\r
1274 if (value > SByte.MaxValue)
\r
1275 throw new OverflowException (Locale.GetText (
\r
1276 "Value is greater than SByte.MaxValue"));
\r
1278 return (sbyte)value;
\r
1281 [CLSCompliant (false)]
\r
1282 public static sbyte ToSByte (DateTime value)
\r
1284 throw new InvalidCastException ("This conversion is not supported.");
\r
1287 [CLSCompliant (false)]
\r
1288 public static sbyte ToSByte (decimal value)
\r
1290 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1291 throw new OverflowException (Locale.GetText (
\r
1292 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1294 // Returned Even-Rounded
\r
1295 return (sbyte)(Math.Round (value));
\r
1298 [CLSCompliant (false)]
\r
1299 public static sbyte ToSByte (double value)
\r
1301 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1302 throw new OverflowException (Locale.GetText (
\r
1303 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1305 // Returned Even-Rounded
\r
1306 return (sbyte)(Math.Round (value));
\r
1309 [CLSCompliant (false)]
\r
1310 public static sbyte ToSByte (float value)
\r
1312 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1313 throw new OverflowException (Locale.GetText (
\r
1314 "Value is greater than SByte.MaxValue or less than SByte.Minalue"));
\r
1316 // Returned Even-Rounded, pass as double to Math
\r
1317 return (sbyte)(Math.Round ( (double)value));
\r
1320 [CLSCompliant (false)]
\r
1321 public static sbyte ToSByte (int value)
\r
1323 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1324 throw new OverflowException (Locale.GetText (
\r
1325 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1327 return (sbyte)value;
\r
1330 [CLSCompliant (false)]
\r
1331 public static sbyte ToSByte (long value)
\r
1333 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1334 throw new OverflowException (Locale.GetText (
\r
1335 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1337 return (sbyte)value;
\r
1340 [CLSCompliant (false)]
\r
1341 public static sbyte ToSByte (sbyte value)
\r
1346 [CLSCompliant (false)]
\r
1347 public static sbyte ToSByte (short value)
\r
1349 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1350 throw new OverflowException (Locale.GetText (
\r
1351 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1353 return (sbyte)value;
\r
1356 [CLSCompliant (false)]
\r
1357 public static sbyte ToSByte (string value)
\r
1359 return SByte.Parse (value);
\r
1362 [CLSCompliant (false)]
\r
1363 public static sbyte ToSByte (string value, IFormatProvider provider)
\r
1365 return SByte.Parse (value, provider);
\r
1368 [CLSCompliant (false)]
\r
1369 public static sbyte ToSByte (string value, int fromBase)
\r
1371 return (sbyte) ConvertFromBase (value, fromBase);
\r
1374 [CLSCompliant (false)]
\r
1375 public static sbyte ToSByte (uint value)
\r
1377 if (value > SByte.MaxValue)
\r
1378 throw new OverflowException (Locale.GetText (
\r
1379 "Value is greater than SByte.MaxValue"));
\r
1381 return (sbyte)value;
\r
1384 [CLSCompliant (false)]
\r
1385 public static sbyte ToSByte (ulong value)
\r
1387 if (value > (ulong)SByte.MaxValue)
\r
1388 throw new OverflowException (Locale.GetText (
\r
1389 "Value is greater than SByte.MaxValue"));
\r
1391 return (sbyte)value;
\r
1394 [CLSCompliant (false)]
\r
1395 public static sbyte ToSByte (ushort value)
\r
1397 if (value > SByte.MaxValue)
\r
1398 throw new OverflowException (Locale.GetText (
\r
1399 "Value is greater than SByte.MaxValue"));
\r
1401 return (sbyte)value;
\r
1404 [CLSCompliant (false)]
\r
1405 public static sbyte ToSByte (object value)
\r
1407 return ToSByte (value, null);
1410 [CLSCompliant (false)]
\r
1411 public static sbyte ToSByte (object value, IFormatProvider provider)
\r
1415 return ((IConvertible) value).ToSByte (provider);
1418 // ========== Single Conversions ========== //
\r
1420 public static float ToSingle (bool value)
\r
1422 return value ? 1 : 0;
\r
1425 public static float ToSingle (byte value)
\r
1427 return (float)value;
\r
1430 public static float ToSingle (Char value)
\r
1432 throw new InvalidCastException ("This conversion is not supported.");
\r
1435 public static float ToSingle (DateTime value)
\r
1437 throw new InvalidCastException ("This conversion is not supported.");
\r
1440 public static float ToSingle (decimal value)
\r
1442 return (float)value;
\r
1445 public static float ToSingle (double value)
\r
1447 if (value > Single.MaxValue || value < Single.MinValue)
\r
1448 throw new OverflowException (Locale.GetText (
\r
1449 "Value is greater than Single.MaxValue or less than Single.MinValue"));
\r
1451 return (float)value;
\r
1454 public static float ToSingle (float value)
\r
1459 public static float ToSingle (int value)
\r
1461 return (float)value;
\r
1464 public static float ToSingle (long value)
\r
1466 return (float)value;
\r
1469 [CLSCompliant (false)]
\r
1470 public static float ToSingle (sbyte value)
\r
1472 return (float)value;
\r
1475 public static float ToSingle (short value)
\r
1477 return (float)value;
\r
1480 public static float ToSingle (string value)
\r
1482 return Single.Parse (value);
\r
1485 public static float ToSingle (string value, IFormatProvider provider)
\r
1487 return Single.Parse (value, provider);
\r
1490 [CLSCompliant (false)]
\r
1491 public static float ToSingle (uint value)
\r
1493 return (float)value;
\r
1496 [CLSCompliant (false)]
\r
1497 public static float ToSingle (ulong value)
\r
1499 return (float)value;
\r
1502 [CLSCompliant (false)]
\r
1503 public static float ToSingle (ushort value)
\r
1505 return (float)value;
\r
1508 [CLSCompliant (false)]
\r
1509 public static float ToSingle (object value)
\r
1511 return ToSingle (value, null);
1514 [CLSCompliant (false)]
\r
1515 public static float ToSingle (object value, IFormatProvider provider)
\r
1519 return ((IConvertible) value).ToSingle (provider);
1522 // ========== String Conversions ========== //
\r
1524 public static string ToString (bool value)
\r
1526 return value.ToString ();
\r
1529 public static string ToString (bool value, IFormatProvider provider)
\r
1531 return value.ToString (); // the same as ToString (bool).
\r
1534 public static string ToString (byte value)
\r
1536 return value.ToString ();
\r
1539 public static string ToString (byte value, IFormatProvider provider)
\r
1541 return value.ToString (provider);
\r
1544 public static string ToString (byte value, int toBase)
\r
1546 if (NotValidBase (toBase))
\r
1547 throw new ArgumentException ("toBase is not valid.");
\r
1549 return ConvertToBase ((int) value, toBase);
\r
1552 public static string ToString (char value)
\r
1554 return value.ToString ();
\r
1557 public static string ToString (char value, IFormatProvider provider)
\r
1559 return value.ToString (); // the same as ToString (char)
\r
1562 public static string ToString (DateTime value)
\r
1564 return value.ToString ();
\r
1567 public static string ToString (DateTime value, IFormatProvider provider)
\r
1569 return value.ToString (provider);
\r
1572 public static string ToString (decimal value)
\r
1574 return value.ToString ();
\r
1577 public static string ToString (decimal value, IFormatProvider provider)
\r
1579 return value.ToString (provider);
\r
1582 public static string ToString (double value)
\r
1584 return value.ToString ();
\r
1587 public static string ToString (double value, IFormatProvider provider)
\r
1589 return value.ToString (provider);
\r
1592 public static string ToString (float value)
\r
1594 return value.ToString ();
\r
1597 public static string ToString (float value, IFormatProvider provider)
\r
1599 return value.ToString (provider);
\r
1602 public static string ToString (int value)
\r
1604 return value.ToString ();
\r
1607 public static string ToString (int value, int fromBase)
\r
1609 int retVal = ConvertFromBase (value.ToString (), fromBase);
\r
1610 return retVal.ToString ();
\r
1613 public static string ToString (int value, IFormatProvider provider)
\r
1615 return value.ToString (provider);
\r
1618 public static string ToString (long value)
\r
1620 return value.ToString ();
\r
1623 public static string ToString (long value, int fromBase)
\r
1625 return (ConvertFromBase (value.ToString (), fromBase)).ToString ();
\r
1628 public static string ToString (long value, IFormatProvider provider)
\r
1630 return value.ToString (provider);
\r
1633 public static string ToString (object value)
\r
1635 return ToString (value, null);
1638 public static string ToString (object value, IFormatProvider provider)
\r
1640 if (value is IConvertible)
1641 return ((IConvertible) value).ToString (provider);
1642 else if (value != null)
1643 return value.ToString ();
1644 return String.Empty;
1647 public static string ToString (sbyte value)
\r
1649 return value.ToString ();
\r
1652 public static string ToString (sbyte value, IFormatProvider provider)
\r
1654 return value.ToString (provider);
\r
1657 public static string ToString (short value)
\r
1659 return value.ToString ();
\r
1662 public static string ToString (short value, int fromBase)
\r
1664 return (ConvertFromBase (value.ToString (), fromBase)).ToString ();
\r
1667 public static string ToString (short value, IFormatProvider provider)
\r
1669 return value.ToString (provider);
\r
1672 public static string ToString (string value)
\r
1677 public static string ToString (string value, IFormatProvider provider)
\r
1679 return value; // provider is ignored.
\r
1682 [CLSCompliant (false)]
\r
1683 public static string ToString (uint value)
\r
1685 return value.ToString ();
\r
1688 [CLSCompliant (false)]
\r
1689 public static string ToString (uint value, IFormatProvider provider)
\r
1691 return value.ToString (provider);
\r
1694 [CLSCompliant (false)]
\r
1695 public static string ToString (ulong value)
\r
1697 return value.ToString ();
\r
1700 [CLSCompliant (false)]
\r
1701 public static string ToString (ulong value, IFormatProvider provider)
\r
1703 return value.ToString (provider);
\r
1706 [CLSCompliant (false)]
\r
1707 public static string ToString (ushort value)
\r
1709 return value.ToString ();
\r
1712 [CLSCompliant (false)]
\r
1713 public static string ToString (ushort value, IFormatProvider provider)
\r
1715 return value.ToString (provider);
\r
1718 // ========== UInt16 Conversions ========== //
\r
1720 [CLSCompliant (false)]
\r
1721 public static ushort ToUInt16 (bool value)
\r
1723 return (ushort)(value ? 1 : 0);
\r
1726 [CLSCompliant (false)]
\r
1727 public static ushort ToUInt16 (byte value)
\r
1729 return (ushort)value;
\r
1732 [CLSCompliant (false)]
\r
1733 public static ushort ToUInt16 (char value)
\r
1735 return (ushort)value;
\r
1738 [CLSCompliant (false)]
\r
1739 public static ushort ToUInt16 (DateTime value)
\r
1741 throw new InvalidCastException ("This conversion is not supported.");
\r
1744 [CLSCompliant (false)]
\r
1745 public static ushort ToUInt16 (decimal value)
\r
1747 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1748 throw new OverflowException (Locale.GetText (
\r
1749 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1751 // Returned Even-Rounded
\r
1752 return (ushort)(Math.Round (value));
\r
1755 [CLSCompliant (false)]
\r
1756 public static ushort ToUInt16 (double value)
\r
1758 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1759 throw new OverflowException (Locale.GetText (
\r
1760 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1762 // Returned Even-Rounded
\r
1763 return (ushort)(Math.Round (value));
\r
1766 [CLSCompliant (false)]
\r
1767 public static ushort ToUInt16 (float value)
\r
1769 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1770 throw new OverflowException (Locale.GetText (
\r
1771 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1773 // Returned Even-Rounded, pass as double to Math
\r
1774 return (ushort)(Math.Round ( (double)value));
\r
1777 [CLSCompliant (false)]
\r
1778 public static ushort ToUInt16 (int value)
\r
1780 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1781 throw new OverflowException (Locale.GetText (
\r
1782 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1784 return (ushort)value;
\r
1787 [CLSCompliant (false)]
\r
1788 public static ushort ToUInt16 (long value)
\r
1790 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1791 throw new OverflowException (Locale.GetText (
\r
1792 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1794 return (ushort)value;
\r
1797 [CLSCompliant (false)]
\r
1798 public static ushort ToUInt16 (sbyte value)
\r
1800 if (value < UInt16.MinValue)
\r
1801 throw new OverflowException (Locale.GetText (
\r
1802 "Value is less than UInt16.MinValue"));
\r
1804 return (ushort)value;
\r
1807 [CLSCompliant (false)]
\r
1808 public static ushort ToUInt16 (short value)
\r
1810 if (value < UInt16.MinValue)
\r
1811 throw new OverflowException (Locale.GetText (
\r
1812 "Value is less than UInt16.MinValue"));
\r
1814 return (ushort)value;
\r
1817 [CLSCompliant (false)]
\r
1818 public static ushort ToUInt16 (string value)
\r
1820 return UInt16.Parse (value);
\r
1823 [CLSCompliant (false)]
\r
1824 public static ushort ToUInt16 (string value, IFormatProvider provider)
\r
1826 return UInt16.Parse (value, provider);
\r
1829 [CLSCompliant (false)]
\r
1830 public static ushort ToUInt16 (string value, int fromBase)
\r
1832 return (ushort) ConvertFromBase (value, fromBase);
\r
1835 [CLSCompliant (false)]
\r
1836 public static ushort ToUInt16 (uint value)
\r
1838 if (value > UInt16.MaxValue)
\r
1839 throw new OverflowException (Locale.GetText (
\r
1840 "Value is greater than UInt16.MaxValue"));
\r
1842 return (ushort)value;
\r
1845 [CLSCompliant (false)]
\r
1846 public static ushort ToUInt16 (ulong value)
\r
1848 if (value > (ulong)UInt16.MaxValue)
\r
1849 throw new OverflowException (Locale.GetText (
\r
1850 "Value is greater than UInt16.MaxValue"));
\r
1852 return (ushort)value;
\r
1855 [CLSCompliant (false)]
\r
1856 public static ushort ToUInt16 (ushort value)
\r
1861 [CLSCompliant (false)]
\r
1862 public static ushort ToUInt16 (object value)
\r
1864 return ToUInt16 (value, null);
1867 [CLSCompliant (false)]
\r
1868 public static ushort ToUInt16 (object value, IFormatProvider provider)
\r
1872 return ((IConvertible) value).ToUInt16 (provider);
1875 // ========== UInt32 Conversions ========== //
\r
1877 [CLSCompliant (false)]
\r
1878 public static uint ToUInt32 (bool value)
\r
1880 return (uint)(value ? 1 : 0);
\r
1883 [CLSCompliant (false)]
\r
1884 public static uint ToUInt32 (byte value)
\r
1886 return (uint)value;
\r
1889 [CLSCompliant (false)]
\r
1890 public static uint ToUInt32 (char value)
\r
1892 return (uint)value;
\r
1895 [CLSCompliant (false)]
\r
1896 public static uint ToUInt32 (DateTime value)
\r
1898 throw new InvalidCastException ("This conversion is not supported.");
\r
1901 [CLSCompliant (false)]
\r
1902 public static uint ToUInt32 (decimal value)
\r
1904 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1905 throw new OverflowException (Locale.GetText (
\r
1906 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1908 // Returned Even-Rounded
\r
1909 return (uint)(Math.Round (value));
\r
1912 [CLSCompliant (false)]
\r
1913 public static uint ToUInt32 (double value)
\r
1915 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1916 throw new OverflowException (Locale.GetText (
\r
1917 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1919 // Returned Even-Rounded
\r
1920 return (uint)(Math.Round (value));
\r
1923 [CLSCompliant (false)]
\r
1924 public static uint ToUInt32 (float value)
\r
1926 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1927 throw new OverflowException (Locale.GetText (
\r
1928 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1930 // Returned Even-Rounded, pass as double to Math
\r
1931 return (uint)(Math.Round ( (double)value));
\r
1934 [CLSCompliant (false)]
\r
1935 public static uint ToUInt32 (int value)
\r
1937 if (value < UInt32.MinValue)
\r
1938 throw new OverflowException (Locale.GetText (
\r
1939 "Value is less than UInt32.MinValue"));
\r
1941 return (uint)value;
\r
1944 [CLSCompliant (false)]
\r
1945 public static uint ToUInt32 (long value)
\r
1947 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1948 throw new OverflowException (Locale.GetText (
\r
1949 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1951 return (uint)value;
\r
1954 [CLSCompliant (false)]
\r
1955 public static uint ToUInt32 (sbyte value)
\r
1957 if (value < UInt32.MinValue)
\r
1958 throw new OverflowException (Locale.GetText (
\r
1959 "Value is less than UInt32.MinValue"));
\r
1961 return (uint)value;
\r
1964 [CLSCompliant (false)]
\r
1965 public static uint ToUInt32 (short value)
\r
1967 if (value < UInt32.MinValue)
\r
1968 throw new OverflowException (Locale.GetText (
\r
1969 "Value is less than UInt32.MinValue"));
\r
1971 return (uint)value;
\r
1974 [CLSCompliant (false)]
\r
1975 public static uint ToUInt32 (string value)
\r
1977 return UInt32.Parse (value);
\r
1980 [CLSCompliant (false)]
\r
1981 public static uint ToUInt32 (string value, IFormatProvider provider)
\r
1983 return UInt32.Parse (value, provider);
\r
1986 [CLSCompliant (false)]
\r
1987 public static uint ToUInt32 (string value, int fromBase)
\r
1989 return (uint) ConvertFromBase (value, fromBase);
\r
1992 [CLSCompliant (false)]
\r
1993 public static uint ToUInt32 (uint value)
\r
1998 [CLSCompliant (false)]
\r
1999 public static uint ToUInt32 (ulong value)
\r
2001 if (value > UInt32.MaxValue)
\r
2002 throw new OverflowException (Locale.GetText (
\r
2003 "Value is greater than UInt32.MaxValue"));
\r
2005 return (uint)value;
\r
2008 [CLSCompliant (false)]
\r
2009 public static uint ToUInt32 (ushort value)
\r
2011 return (uint)value;
\r
2014 [CLSCompliant (false)]
\r
2015 public static uint ToUInt32 (object value)
\r
2017 return ToUInt32 (value, null);
2020 [CLSCompliant (false)]
\r
2021 public static uint ToUInt32 (object value, IFormatProvider provider)
\r
2025 return ((IConvertible) value).ToUInt32 (provider);
2029 // ========== UInt64 Conversions ========== //
\r
2031 [CLSCompliant (false)]
\r
2032 public static ulong ToUInt64 (bool value)
\r
2034 return (ulong)(value ? 1 : 0);
\r
2037 [CLSCompliant (false)]
\r
2038 public static ulong ToUInt64 (byte value)
\r
2040 return (ulong)value;
\r
2043 [CLSCompliant (false)]
\r
2044 public static ulong ToUInt64 (char value)
\r
2046 return (ulong)value;
\r
2049 [CLSCompliant (false)]
\r
2050 public static ulong ToUInt64 (DateTime value)
\r
2052 throw new InvalidCastException ("The conversion is not supported.");
\r
2055 [CLSCompliant (false)]
\r
2056 public static ulong ToUInt64 (decimal value)
\r
2058 if (value > UInt64.MaxValue || value < UInt64.MinValue)
\r
2059 throw new OverflowException (Locale.GetText (
\r
2060 "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
\r
2062 // Returned Even-Rounded
\r
2063 return (ulong)(Math.Round (value));
\r
2066 [CLSCompliant (false)]
\r
2067 public static ulong ToUInt64 (double value)
\r
2069 if (value > UInt64.MaxValue || value < UInt64.MinValue)
\r
2070 throw new OverflowException (Locale.GetText (
\r
2071 "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
\r
2073 // Returned Even-Rounded
\r
2074 return (ulong)(Math.Round (value));
\r
2077 [CLSCompliant (false)]
\r
2078 public static ulong ToUInt64 (float value)
\r
2080 if (value > UInt64.MaxValue || value < UInt64.MinValue)
\r
2081 throw new OverflowException (Locale.GetText (
\r
2082 "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
\r
2084 // Returned Even-Rounded, pass as a double to Math
\r
2085 return (ulong)(Math.Round ( (double)value));
\r
2088 [CLSCompliant (false)]
\r
2089 public static ulong ToUInt64 (int value)
\r
2091 if (value < (int)UInt64.MinValue)
\r
2092 throw new OverflowException (Locale.GetText (
\r
2093 "Value is less than UInt64.MinValue"));
\r
2095 return (ulong)value;
\r
2098 [CLSCompliant (false)]
\r
2099 public static ulong ToUInt64 (long value)
\r
2101 if (value < (long)UInt64.MinValue)
\r
2102 throw new OverflowException (Locale.GetText (
\r
2103 "Value is less than UInt64.MinValue"));
\r
2105 return (ulong)value;
\r
2108 [CLSCompliant (false)]
\r
2109 public static ulong ToUInt64 (sbyte value)
\r
2111 if (value < (sbyte)UInt64.MinValue)
\r
2112 throw new OverflowException
\r
2113 ("Value is less than UInt64.MinValue");
\r
2115 return (ulong)value;
\r
2118 [CLSCompliant (false)]
\r
2119 public static ulong ToUInt64 (short value)
\r
2121 if (value < (short)UInt64.MinValue)
\r
2122 throw new OverflowException (Locale.GetText (
\r
2123 "Value is less than UInt64.MinValue"));
\r
2125 return (ulong)value;
\r
2128 [CLSCompliant (false)]
\r
2129 public static ulong ToUInt64 (string value)
\r
2131 return UInt64.Parse (value);
\r
2134 [CLSCompliant (false)]
\r
2135 public static ulong ToUInt64 (string value, IFormatProvider provider)
\r
2137 return UInt64.Parse (value, provider);
\r
2140 [CLSCompliant (false)]
\r
2141 public static ulong ToUInt64 (string value, int fromBase)
\r
2143 return (ulong) ConvertFromBase (value, fromBase);
\r
2146 [CLSCompliant (false)]
\r
2147 public static ulong ToUInt64 (uint value)
\r
2149 return (ulong)value;
\r
2152 [CLSCompliant (false)]
\r
2153 public static ulong ToUInt64 (ulong value)
\r
2158 [CLSCompliant (false)]
\r
2159 public static ulong ToUInt64 (ushort value)
\r
2161 return (ulong)value;
\r
2164 [CLSCompliant (false)]
\r
2165 public static ulong ToUInt64 (object value)
\r
2167 return ToUInt64 (value, null);
2170 [CLSCompliant (false)]
\r
2171 public static ulong ToUInt64 (object value, IFormatProvider provider)
\r
2175 return ((IConvertible) value).ToUInt64 (provider);
2179 // ========== Conversion / Helper Functions ========== //
\r
2181 public static object ChangeType (object value, Type conversionType)
\r
2183 CultureInfo ci = CultureInfo.CurrentCulture;
\r
2184 NumberFormatInfo number = ci.NumberFormat;
\r
2185 return ToType (value, conversionType, number);
\r
2188 public static object ChangeType (object value, TypeCode typeCode)
\r
2190 CultureInfo ci = CultureInfo.CurrentCulture;
\r
2191 Type conversionType = conversionTable [(int)typeCode];
\r
2192 NumberFormatInfo number = ci.NumberFormat;
\r
2193 return ToType (value, conversionType, number);
\r
2196 public static object ChangeType (object value, Type conversionType, IFormatProvider provider)
\r
2198 return ToType (value, conversionType, provider);
\r
2201 public static object ChangeType (object value, TypeCode typeCode, IFormatProvider provider)
\r
2203 Type conversionType = conversionTable [(int)typeCode];
\r
2204 return ToType (value, conversionType, provider);
\r
2207 private static bool NotValidBase (int value)
\r
2209 if ((value == 2) || (value == 8) ||
\r
2210 (value == 10) || (value == 16))
\r
2216 private static int ConvertFromBase (string value, int fromBase)
\r
2218 if (NotValidBase (fromBase))
\r
2219 throw new ArgumentException ("fromBase is not valid.");
\r
2223 foreach (char c in value) {
\r
2224 if (Char.IsLetter (c))
\r
2225 result = (fromBase) * result + c - 'a' + 10;
\r
2227 result = (fromBase) * result + c - '0';
\r
2232 private static string ConvertToBase (int value, int toBase)
\r
2234 StringBuilder sb = new StringBuilder ();
\r
2235 BuildConvertedString (sb, value, toBase);
\r
2236 return sb.ToString ();
\r
2239 internal static void BuildConvertedString (StringBuilder sb, int value, int toBase)
\r
2241 int divided = value / toBase;
\r
2242 int reminder = value % toBase;
\r
2245 BuildConvertedString (sb, divided, toBase);
\r
2247 if (reminder >= 10)
\r
2248 sb.Append ((char) (reminder + 'a' - 10));
\r
2250 sb.Append ((char) (reminder + '0'));
\r
2252 // Lookup table for the conversion ToType method. Order
\r
2253 // is important! Used by ToType for comparing the target
\r
2254 // type, and uses hardcoded array indexes.
\r
2255 private static Type[] conversionTable = {
\r
2256 // Valid ICovnertible Types
\r
2257 typeof (Boolean), // 0 TypeCode.Boolean
\r
2258 typeof (Byte), // 1 TypeCode.Byte
\r
2259 typeof (Char), // 2 TypeCode.Char
\r
2260 typeof (DateTime), // 3 TypeCode.DateTime
\r
2261 typeof (Decimal), // 4 TypeCode.Decimal
\r
2262 typeof (Double), // 5 TypeCode.Double
\r
2263 typeof (Int16), // 6 TypeCode.Int16
\r
2264 typeof (Int32), // 7 TypeCode.Int32
\r
2265 typeof (Int64), // 8 TypeCode.Int64
\r
2266 typeof (SByte), // 9 TypeCode.Sbyte
\r
2267 typeof (Single), // 10 TypeCode.Single
\r
2268 typeof (String), // 11 TypeCode.String
\r
2269 typeof (UInt16), // 12 TypeCode.UInt16
\r
2270 typeof (UInt32), // 13 TypeCode.UInt32
\r
2271 typeof (UInt64), // 14 TypeCode.UInt64
\r
2273 // Invalid IConvertible Interface Types
\r
2274 typeof (Object) // 15 TypeCode.Object
\r
2277 // Function to convert an object to another type and return
\r
2278 // it as an object. In place for the core data types to use
\r
2279 // when implementing IConvertible. Uses hardcoded indexes in
\r
2280 // the conversionTypes array, so if modify carefully.
\r
2281 internal static object ToType (object value, Type conversionType,
\r
2282 IFormatProvider provider)
\r
2284 if (value == null)
\r
2285 throw new ArgumentException (Locale.GetText (
\r
2286 "Invalid conversion from null value"));
\r
2288 if (value is IConvertible) {
\r
2289 IConvertible convertValue = (IConvertible)value;
\r
2291 if (conversionType == conversionTable[0]) {
\r
2292 // 0 TypeCode.Boolean
\r
2293 return (object)(convertValue.ToBoolean (provider));
\r
2295 } else if (conversionType == conversionTable[1]) {
\r
2296 // 1 TypeCode.Byte
\r
2297 return (object)(convertValue.ToByte (provider));
\r
2299 } else if (conversionType == conversionTable[2]) {
\r
2300 // 2 TypeCode.Char
\r
2301 return (object)(convertValue.ToChar (provider));
\r
2303 } else if (conversionType == conversionTable[3]) {
\r
2304 // 3 TypeCode.DateTime
\r
2305 return (object)(convertValue.ToDateTime (provider));
\r
2307 } else if (conversionType == conversionTable[4]) {
\r
2308 // 4 TypeCode.Decimal
\r
2309 return (object)(convertValue.ToDecimal (provider));
\r
2311 } else if (conversionType == conversionTable[5]) {
\r
2312 // 5 TypeCode.Double
\r
2313 return (object)(convertValue.ToDouble (provider));
\r
2315 } else if (conversionType == conversionTable[6]) {
\r
2316 // 6 TypeCode.Int16
\r
2317 return (object)(convertValue.ToInt16 (provider));
\r
2319 } else if (conversionType == conversionTable[7]) {
\r
2320 // 7 TypeCode.Int32
\r
2321 return (object)(convertValue.ToInt32 (provider));
\r
2323 } else if (conversionType == conversionTable[8]) {
\r
2324 // 8 TypeCode.Int64
\r
2325 return (object)(convertValue.ToInt64 (provider));
\r
2327 } else if (conversionType == conversionTable[9]) {
\r
2328 // 9 TypeCode.Sbyte
\r
2329 return (object)(convertValue.ToSByte (provider));
\r
2331 } else if (conversionType == conversionTable[10]) {
\r
2332 // 10 TypeCode.Single
\r
2333 return (object)(convertValue.ToSingle (provider));
\r
2335 } else if (conversionType == conversionTable[11]) {
\r
2336 // 11 TypeCode.String
\r
2337 return (object)(convertValue.ToString (provider));
\r
2339 } else if (conversionType == conversionTable[12]) {
\r
2340 // 12 TypeCode.UInt16
\r
2341 return (object)(convertValue.ToUInt16 (provider));
\r
2343 } else if (conversionType == conversionTable[13]) {
\r
2344 // 13 TypeCode.UInt32
\r
2345 return (object)(convertValue.ToUInt32 (provider));
\r
2347 } else if (conversionType == conversionTable[14]) {
\r
2348 // 14 TypeCode.UInt64
\r
2349 return (object)(convertValue.ToUInt64 (provider));
\r
2351 } else if (conversionType == conversionTable[15]) {
\r
2352 // 15 TypeCode.Object
\r
2353 return (object)(value);
\r
2356 // Not in the conversion table
\r
2357 throw new InvalidCastException (Locale.GetText (
\r
2358 "Unknown target conversion type"));
\r
2361 // Value is not IConvertible
\r
2362 throw new ArgumentException (Locale.GetText (
\r
2363 "Value is not a convertible object: "+ value.GetType().ToString()+" to "+conversionType.ToString()));
\r