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
83 // ========== BASE 64 Conversions ========== //
\r
84 // the BASE64 convert methods are using the Base64 converting methods
\r
85 // from System.Security.Cryptography.ToBase64Transform and
\r
86 // System.Security.Cryptography.FromBase64Transform
\r
88 // should be changed to a stand-alone class Base64Encoder & Base64Decoder
\r
90 public static byte[] FromBase64CharArray(char[] inArray, int offset, int length)
\r
92 if (inArray == null)
\r
93 throw new ArgumentNullException();
\r
95 int len = inArray.Length;
\r
96 if (len < 4 || len % 4 != 0)
\r
97 throw new FormatException();
\r
99 byte[] inArr = new System.Text.UnicodeEncoding().GetBytes(inArray);
\r
100 FromBase64Transform t = new FromBase64Transform();
\r
102 return t.TransformFinalBlock(inArr, 0, inArr.Length);
\r
105 public static byte[] FromBase64String(string s)
\r
108 throw new ArgumentNullException();
\r
110 char[] inArr = s.ToCharArray();
\r
112 return FromBase64CharArray(inArr, 0, inArr.Length);
\r
115 public static TypeCode GetTypeCode (object value)
\r
118 return TypeCode.Empty;
\r
120 return Type.GetTypeCode (value.GetType ());
\r
123 public static bool IsDBNull (object value)
\r
125 TypeCode tc = Type.GetTypeCode (value.GetType ());
\r
127 if (tc == TypeCode.DBNull)
\r
133 public static int ToBase64CharArray(byte[] inArray, int offsetIn, int length,
\r
134 char[] outArray, int offsetOut)
\r
136 if (inArray == null || outArray == null)
\r
137 throw new ArgumentNullException();
\r
139 if (offsetIn < 0 || length < 0 || offsetOut < 0 || (offsetIn + length) > inArray.Length)
\r
140 throw new ArgumentOutOfRangeException();
\r
142 ToBase64Transform t = new ToBase64Transform();
\r
143 byte[] outArr = t.TransformFinalBlock(inArray, offsetIn, length);
\r
145 char[] cOutArr = new System.Text.ASCIIEncoding().GetChars(outArr);
\r
147 if ((offsetOut + cOutArr.Length) > outArray.Length)
\r
148 throw new ArgumentOutOfRangeException();
\r
150 Array.Copy(cOutArr, 0, outArray, offsetOut, cOutArr.Length);
\r
152 return cOutArr.Length;
\r
155 public static string ToBase64String(byte[] inArray)
\r
157 if (inArray == null)
\r
158 throw new ArgumentNullException();
\r
160 return ToBase64String(inArray, 0, inArray.Length);
\r
163 public static string ToBase64String(byte[] inArray, int offset, int length)
\r
165 if (inArray == null)
\r
166 throw new ArgumentNullException();
\r
168 if (offset < 0 || length < 0 || (offset + length) > inArray.Length)
\r
169 throw new ArgumentOutOfRangeException();
\r
171 // FIXME: change to stand alone Base64 Encoder class
\r
172 ToBase64Transform t = new ToBase64Transform();
\r
173 byte[] outArr = t.TransformFinalBlock(inArray, offset, length);
\r
175 return (new System.Text.ASCIIEncoding().GetString(outArr));
\r
178 // ========== Boolean Conversions ========== //
\r
180 public static bool ToBoolean (bool value)
\r
185 public static bool ToBoolean (byte value)
\r
187 return (value != 0);
\r
190 public static bool ToBoolean (char value)
\r
192 throw new InvalidCastException (Locale.GetText ("Can't convert char to bool"));
\r
195 public static bool ToBoolean (DateTime value)
\r
197 throw new InvalidCastException (Locale.GetText ("Can't convert date to bool"));
\r
200 public static bool ToBoolean (decimal value)
\r
202 return (value != 0M);
\r
205 public static bool ToBoolean (double value)
\r
207 return (value != 0);
\r
210 public static bool ToBoolean (float value)
\r
212 return (value != 0f);
\r
215 public static bool ToBoolean (int value)
\r
217 return (value != 0);
\r
220 public static bool ToBoolean (long value)
\r
222 return (value != 0);
\r
225 public static bool ToBoolean (sbyte value)
\r
227 return (value != 0);
\r
230 public static bool ToBoolean (short value)
\r
232 return (value != 0);
\r
235 public static bool ToBoolean (string value)
\r
237 return Boolean.Parse (value);
\r
240 public static bool ToBoolean (string value, IFormatProvider provider)
\r
242 return Boolean.Parse (value); // provider is ignored.
\r
245 public static bool ToBoolean (uint value)
\r
247 return (value != 0);
\r
250 public static bool ToBoolean (ulong value)
\r
252 return (value != 0);
\r
255 public static bool ToBoolean (ushort value)
\r
257 return (value != 0);
\r
260 public static bool ToBoolean (object value)
\r
262 return (bool) ChangeType (value, typeof (System.Boolean));
\r
265 public static bool ToBoolean (object value, IFormatProvider provider)
\r
267 return (bool) ChangeType (value, typeof (System.Boolean), provider);
\r
270 // ========== Byte Conversions ========== //
\r
272 public static byte ToByte (bool value)
\r
274 return (byte)(value ? 1 : 0);
\r
277 public static byte ToByte (byte value)
\r
282 public static byte ToByte (char value)
\r
284 if (value > Byte.MaxValue)
\r
285 throw new OverflowException (Locale.GetText (
\r
286 "Value is greater than Byte.MaxValue"));
\r
288 return (byte)value;
\r
291 public static byte ToByte (DateTime value)
\r
293 throw new InvalidCastException ("This conversion is not supported.");
\r
296 public static byte ToByte (decimal value)
\r
298 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
299 throw new OverflowException (Locale.GetText (
\r
300 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
302 // Returned Even-Rounded
\r
303 return (byte)(Math.Round (value));
\r
306 public static byte ToByte (double value)
\r
308 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
309 throw new OverflowException (Locale.GetText (
\r
310 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
312 // This and the float version of ToByte are the only ones
\r
313 // the spec listed as checking for .NaN and Infinity overflow
\r
314 if (Double.IsNaN(value) || Double.IsInfinity(value))
\r
315 throw new OverflowException (Locale.GetText (
\r
316 "Value is equal to Double.NaN, Double.PositiveInfinity, or Double.NegativeInfinity"));
\r
318 // Returned Even-Rounded
\r
319 return (byte)(Math.Round (value));
\r
322 public static byte ToByte (float value)
\r
324 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
325 throw new OverflowException (Locale.GetText (
\r
326 "Value is greater than Byte.MaxValue or less than Byte.Minalue"));
\r
328 // This and the double version of ToByte are the only ones
\r
329 // the spec listed as checking for .NaN and Infinity overflow
\r
330 if (Single.IsNaN(value) || Single.IsInfinity(value))
\r
331 throw new OverflowException (Locale.GetText (
\r
332 "Value is equal to Single.NaN, Single.PositiveInfinity, or Single.NegativeInfinity"));
\r
334 // Returned Even-Rounded, pass it as a double, could have this
\r
335 // method just call Convert.ToByte ( (double)value)
\r
336 return (byte)(Math.Round ( (double)value));
\r
339 public static byte ToByte (int value)
\r
341 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
342 throw new OverflowException (Locale.GetText (
\r
343 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
345 return (byte)value;
\r
348 public static byte ToByte (long value)
\r
350 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
351 throw new OverflowException (Locale.GetText (
\r
352 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
354 return (byte)value;
\r
357 public static byte ToByte (sbyte value)
\r
359 if (value < Byte.MinValue)
\r
360 throw new OverflowException (Locale.GetText (
\r
361 "Value is less than Byte.MinValue"));
\r
363 return (byte)value;
\r
366 public static byte ToByte (short value)
\r
368 if (value > Byte.MaxValue || value < Byte.MinValue)
\r
369 throw new OverflowException (Locale.GetText (
\r
370 "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
\r
372 return (byte)value;
\r
375 public static byte ToByte (string value)
\r
377 return Byte.Parse (value);
\r
380 public static byte ToByte (string value, IFormatProvider provider)
\r
382 return Byte.Parse (value, provider);
\r
385 public static byte ToByte (string value, int fromBase)
\r
387 return (byte) ConvertFromBase (value, fromBase);
\r
390 public static byte ToByte (uint value)
\r
392 if (value > Byte.MaxValue)
\r
393 throw new OverflowException (Locale.GetText (
\r
394 "Value is greater than Byte.MaxValue"));
\r
396 return (byte)value;
\r
399 public static byte ToByte (ulong value)
\r
401 if (value > Byte.MaxValue)
\r
402 throw new OverflowException (Locale.GetText (
\r
403 "Value is greater than Byte.MaxValue"));
\r
405 return (byte)value;
\r
408 public static byte ToByte (ushort value)
\r
410 if (value > Byte.MaxValue)
\r
411 throw new OverflowException (Locale.GetText (
\r
412 "Value is greater than Byte.MaxValue"));
\r
414 return (byte)value;
\r
417 public static byte ToByte (object value)
\r
419 return (byte) ChangeType (value, typeof (System.Byte));
\r
422 public static byte ToByte (object value, IFormatProvider provider)
\r
424 return (byte) ChangeType (value, typeof (System.Byte), provider);
\r
427 // ========== Char Conversions ========== //
\r
429 public static char ToChar (bool value)
\r
431 throw new InvalidCastException ("This conversion is not supported.");
\r
434 public static char ToChar (byte value)
\r
436 return (char)value;
\r
439 public static char ToChar (char value)
\r
444 public static char ToChar (DateTime value)
\r
446 throw new InvalidCastException ("This conversion is not supported.");
\r
449 public static char ToChar (decimal value)
\r
451 throw new InvalidCastException ("This conversion is not supported.");
\r
454 public static char ToChar (double value)
\r
456 throw new InvalidCastException ("This conversion is not supported.");
\r
459 public static char ToChar (int value)
\r
461 if (value > Char.MaxValue || value < Char.MinValue)
\r
462 throw new OverflowException (Locale.GetText (
\r
463 "Value is greater than Char.MaxValue or less than Char.MinValue"));
\r
465 return (char)value;
\r
468 public static char ToChar (long value)
\r
470 if (value > Char.MaxValue || value < Char.MinValue)
\r
471 throw new OverflowException (Locale.GetText (
\r
472 "Value is greater than Char.MaxValue or less than Char.MinValue"));
\r
474 return (char)value;
\r
477 public static char ToChar (float value)
\r
479 throw new InvalidCastException ("This conversion is not supported.");
\r
482 public static char ToChar (sbyte value)
\r
484 if (value < Char.MinValue)
\r
485 throw new OverflowException (Locale.GetText (
\r
486 "Value is less than Char.MinValue"));
\r
488 return (char)value;
\r
491 public static char ToChar (short value)
\r
493 if (value < Char.MinValue)
\r
494 throw new OverflowException (Locale.GetText (
\r
495 "Value is less than Char.MinValue"));
\r
497 return (char)value;
\r
500 public static char ToChar (string value)
\r
502 return Char.Parse (value);
\r
505 public static char ToChar (string value, IFormatProvider provider)
\r
507 return Char.Parse (value); // provider is ignored.
\r
510 public static char ToChar (uint value)
\r
512 if (value > Char.MaxValue)
\r
513 throw new OverflowException (Locale.GetText (
\r
514 "Value is greater than Char.MaxValue"));
\r
516 return (char)value;
\r
519 public static char ToChar (ulong value)
\r
521 if (value > Char.MaxValue)
\r
522 throw new OverflowException (Locale.GetText (
\r
523 "Value is greater than Char.MaxValue"));
\r
525 return (char)value;
\r
528 public static char ToChar (ushort value)
\r
530 if (value > Char.MaxValue)
\r
531 throw new OverflowException (Locale.GetText (
\r
532 "Value is greater than Char.MaxValue"));
\r
534 return (char)value;
\r
537 public static char ToChar (object value)
\r
539 return (char) ChangeType (value, typeof (System.Char));
\r
542 public static char ToChar (object value, IFormatProvider provider)
\r
545 return Char.MinValue;
\r
547 return (char) ChangeType (value, typeof (System.Char), provider);
\r
550 // ========== DateTime Conversions ========== //
\r
552 public static DateTime ToDateTime (string value)
\r
554 return DateTime.Parse (value);
\r
557 public static DateTime ToDateTime (string value, IFormatProvider provider)
\r
559 return DateTime.Parse (value, provider);
\r
562 public static DateTime ToDateTime (bool value)
\r
564 throw new InvalidCastException ("This conversion is not supported.");
\r
567 public static DateTime ToDateTime (byte value)
\r
569 throw new InvalidCastException ("This conversion is not supported.");
\r
572 public static DateTime ToDateTime (char value)
\r
574 throw new InvalidCastException ("This conversion is not supported.");
\r
577 public static DateTime ToDateTime (DateTime value)
\r
582 public static DateTime ToDateTime (decimal value)
\r
584 throw new InvalidCastException ("This conversion is not supported.");
\r
587 public static DateTime ToDateTime (double value)
\r
589 throw new InvalidCastException ("This conversion is not supported.");
\r
592 public static DateTime ToDateTime (short value)
\r
594 throw new InvalidCastException ("This conversion is not supported.");
\r
597 public static DateTime ToDateTime (int value)
\r
599 throw new InvalidCastException ("This conversion is not supported.");
\r
602 public static DateTime ToDateTime (long value)
\r
604 throw new InvalidCastException ("This conversion is not supported.");
\r
607 public static DateTime ToDateTime (float value)
\r
609 throw new InvalidCastException ("This conversion is not supported.");
\r
612 public static DateTime ToDateTime (object value)
\r
614 return (DateTime) ChangeType (value, typeof (System.DateTime));
\r
617 public static DateTime ToDateTime (object value, IFormatProvider provider)
\r
619 return (DateTime) ChangeType (value, typeof (System.DateTime), provider);
\r
622 [CLSCompliant (false)]
\r
623 public static DateTime ToDateTime (sbyte value)
\r
625 throw new InvalidCastException ("This conversion is not supported.");
\r
627 [CLSCompliant (false)]
\r
628 public static DateTime ToDateTime (ushort value)
\r
630 throw new InvalidCastException ("This conversion is not supported.");
\r
633 [CLSCompliant (false)]
\r
634 public static DateTime ToDateTime (uint value)
\r
636 throw new InvalidCastException ("This conversion is not supported.");
\r
639 [CLSCompliant (false)]
\r
640 public static DateTime ToDateTime (ulong value)
\r
642 throw new InvalidCastException ("This conversion is not supported.");
\r
645 // ========== Decimal Conversions ========== //
\r
647 public static decimal ToDecimal (bool value)
\r
649 return value ? 1 : 0;
\r
652 public static decimal ToDecimal (byte value)
\r
654 return (decimal)value;
\r
657 public static decimal ToDecimal (char value)
\r
659 throw new InvalidCastException ("This conversion is not supported.");
\r
662 public static decimal ToDecimal (DateTime value)
\r
664 throw new InvalidCastException ("This conversion is not supported.");
\r
667 public static decimal ToDecimal (decimal value)
\r
672 public static decimal ToDecimal (double value)
\r
674 if (value > (double)Decimal.MaxValue || value < (double)Decimal.MinValue)
\r
675 throw new OverflowException (Locale.GetText (
\r
676 "Value is greater than Decimal.MaxValue or less than Decimal.MinValue"));
\r
678 return (decimal)value;
\r
681 public static decimal ToDecimal (float value)
\r
683 return (decimal) Math.Round (value);
\r
686 public static decimal ToDecimal (int value)
\r
688 return (decimal)value;
\r
691 public static decimal ToDecimal (long value)
\r
693 return (decimal)value;
\r
696 [CLSCompliant (false)]
\r
697 public static decimal ToDecimal (sbyte value)
\r
699 return (decimal)value;
\r
702 public static decimal ToDecimal (short value)
\r
704 return (decimal)value;
\r
707 public static decimal ToDecimal (string value)
\r
709 return Decimal.Parse (value);
\r
712 public static decimal ToDecimal (string value, IFormatProvider provider)
\r
714 return Decimal.Parse (value, provider);
\r
717 [CLSCompliant (false)]
\r
718 public static decimal ToDecimal (uint value)
\r
720 return (decimal)value;
\r
723 [CLSCompliant (false)]
\r
724 public static decimal ToDecimal (ulong value)
\r
726 return (decimal)value;
\r
729 [CLSCompliant (false)]
\r
730 public static decimal ToDecimal (ushort value)
\r
732 return (decimal)value;
\r
735 public static decimal ToDecimal (object value)
\r
737 return (decimal) ChangeType (value, typeof (System.Decimal));
\r
740 public static decimal ToDecimal (object value, IFormatProvider provider)
\r
742 return (decimal) ChangeType (value, typeof (System.Decimal), provider);
\r
746 // ========== Double Conversions ========== //
\r
748 public static double ToDouble (bool value)
\r
750 return value ? 1 : 0;
\r
753 public static double ToDouble (byte value)
\r
755 throw new InvalidCastException ("This conversion is not supported.");
\r
758 public static double ToDouble (char value)
\r
760 throw new InvalidCastException ("This conversion is not supported.");
\r
763 public static double ToDouble (DateTime value)
\r
765 throw new InvalidCastException ("This conversion is not supported.");
\r
768 public static double ToDouble (decimal value)
\r
770 return (double)value;
\r
773 public static double ToDouble (double value)
\r
778 public static double ToDouble (float value)
\r
780 return (double) Math.Round (value);
\r
783 public static double ToDouble (int value)
\r
785 return (double)value;
\r
788 public static double ToDouble (long value)
\r
790 return (double)value;
\r
793 [CLSCompliant (false)]
\r
794 public static double ToDouble (sbyte value)
\r
796 return (double)value;
\r
799 public static double ToDouble (short value)
\r
801 return (double)value;
\r
804 public static double ToDouble (string value)
\r
806 return Double.Parse (value);
\r
809 public static double ToDouble (string value, IFormatProvider provider)
\r
811 return Double.Parse (value, provider);
\r
814 [CLSCompliant (false)]
\r
815 public static double ToDouble (uint value)
\r
817 return (double)value;
\r
820 [CLSCompliant (false)]
\r
821 public static double ToDouble (ulong value)
\r
823 return (double)value;
\r
826 [CLSCompliant (false)]
\r
827 public static double ToDouble (ushort value)
\r
829 return (double)value;
\r
832 public static double ToDouble (object value)
\r
834 return (double) ChangeType (value, typeof (System.Double));
\r
837 public static double ToDouble (object value, IFormatProvider provider)
\r
839 return (double) ChangeType (value, typeof (System.Double), provider);
\r
842 // ========== Int16 Conversions ========== //
\r
844 public static short ToInt16 (bool value)
\r
846 return (short)(value ? 1 : 0);
\r
849 public static short ToInt16 (byte value)
\r
851 return (short)value;
\r
854 public static short ToInt16 (char value)
\r
856 if (value > Int16.MaxValue)
\r
857 throw new OverflowException (Locale.GetText (
\r
858 "Value is greater than Int16.MaxValue"));
\r
860 return (short)value;
\r
863 public static short ToInt16 (DateTime value)
\r
865 throw new InvalidCastException ("This conversion is not supported.");
\r
868 public static short ToInt16 (decimal value)
\r
870 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
871 throw new OverflowException (Locale.GetText (
\r
872 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
874 // Returned Even-Rounded
\r
875 return (short)(Math.Round (value));
\r
878 public static short ToInt16 (double value)
\r
880 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
881 throw new OverflowException (Locale.GetText (
\r
882 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
884 // Returned Even-Rounded
\r
885 return (short)(Math.Round (value));
\r
888 public static short ToInt16 (float value)
\r
890 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
891 throw new OverflowException (Locale.GetText (
\r
892 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
894 // Returned Even-Rounded, use Math.Round pass as a double.
\r
895 return (short)Math.Round ( (double)value);
\r
898 public static short ToInt16 (int value)
\r
900 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
901 throw new OverflowException (Locale.GetText (
\r
902 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
904 return (short)value;
\r
907 public static short ToInt16 (long value)
\r
909 if (value > Int16.MaxValue || value < Int16.MinValue)
\r
910 throw new OverflowException (Locale.GetText (
\r
911 "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
\r
913 return (short)value;
\r
916 [CLSCompliant (false)]
\r
917 public static short ToInt16 (sbyte value)
\r
919 return (short)value;
\r
922 public static short ToInt16 (short value)
\r
927 public static short ToInt16 (string value)
\r
929 return Int16.Parse (value);
\r
932 public static short ToInt16 (string value, IFormatProvider provider)
\r
934 return Int16.Parse (value, provider);
\r
938 public static short ToInt16 (string value, int fromBase)
\r
940 return (short) ConvertFromBase (value, fromBase);
\r
943 [CLSCompliant (false)]
\r
944 public static short ToInt16 (uint value)
\r
946 if (value > Int16.MaxValue)
\r
947 throw new OverflowException (Locale.GetText (
\r
948 "Value is greater than Int16.MaxValue"));
\r
950 return (short)value;
\r
953 [CLSCompliant (false)]
\r
954 public static short ToInt16 (ulong value)
\r
956 if (value > (ulong)Int16.MaxValue)
\r
957 throw new OverflowException (Locale.GetText (
\r
958 "Value is greater than Int16.MaxValue"));
\r
959 return (short)value;
\r
962 [CLSCompliant (false)]
\r
963 public static short ToInt16 (ushort value)
\r
965 if (value > Int16.MaxValue)
\r
966 throw new OverflowException (Locale.GetText (
\r
967 "Value is greater than Int16.MaxValue"));
\r
969 return (short)value;
\r
972 public static short ToInt16 (object value)
\r
974 return (short) ChangeType (value, typeof (System.Int16));
\r
977 public static short ToInt16 (object value, IFormatProvider provider)
\r
979 return (short) ChangeType (value, typeof (System.Int16), provider);
\r
982 // ========== Int32 Conversions ========== //
\r
984 public static int ToInt32 (bool value)
\r
986 return value ? 1 : 0;
\r
989 public static int ToInt32 (byte value)
\r
991 return (int)value;
\r
994 public static int ToInt32 (char value)
\r
996 return (int)value;
\r
999 public static int ToInt32 (DateTime value)
\r
1001 throw new InvalidCastException ("This conversion is not supported.");
\r
1004 public static int ToInt32 (decimal value)
\r
1006 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1007 throw new OverflowException (Locale.GetText (
\r
1008 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1010 // Returned Even-Rounded
\r
1011 return (int)(Math.Round (value));
\r
1014 public static int ToInt32 (double value)
\r
1016 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1017 throw new OverflowException (Locale.GetText (
\r
1018 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1020 // Returned Even-Rounded
\r
1021 return (int)(Math.Round (value));
\r
1024 public static int ToInt32 (float value)
\r
1026 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1027 throw new OverflowException (Locale.GetText (
\r
1028 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1030 // Returned Even-Rounded, pass as a double, could just call
\r
1031 // Convert.ToInt32 ( (double)value);
\r
1032 return (int)(Math.Round ( (double)value));
\r
1035 public static int ToInt32 (int value)
\r
1040 public static int ToInt32 (long value)
\r
1042 if (value > Int32.MaxValue || value < Int32.MinValue)
\r
1043 throw new OverflowException (Locale.GetText (
\r
1044 "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
\r
1046 return (int)value;
\r
1049 [CLSCompliant (false)]
\r
1050 public static int ToInt32 (sbyte value)
\r
1052 return (int)value;
\r
1055 public static int ToInt32 (short value)
\r
1057 return (int)value;
\r
1060 public static int ToInt32 (string value)
\r
1062 return Int32.Parse (value);
\r
1065 public static int ToInt32 (string value, IFormatProvider provider)
\r
1067 return Int32.Parse (value, provider);
\r
1071 public static int ToInt32 (string value, int fromBase)
\r
1073 return ConvertFromBase (value, fromBase);
\r
1076 [CLSCompliant (false)]
\r
1077 public static int ToInt32 (uint value)
\r
1079 if (value > Int32.MaxValue)
\r
1080 throw new OverflowException (Locale.GetText (
\r
1081 "Value is greater than Int32.MaxValue"));
\r
1083 return (int)value;
\r
1086 [CLSCompliant (false)]
\r
1087 public static int ToInt32 (ulong value)
\r
1089 if (value > Int32.MaxValue)
\r
1090 throw new OverflowException (Locale.GetText (
\r
1091 "Value is greater than Int32.MaxValue"));
\r
1093 return (int)value;
\r
1096 [CLSCompliant (false)]
\r
1097 public static int ToInt32 (ushort value)
\r
1099 return (int)value;
\r
1102 public static int ToInt32 (object value)
\r
1104 return (int) ChangeType (value, typeof (System.Int32));
\r
1107 public static int ToInt32 (object value, IFormatProvider provider)
\r
1109 return (int) ChangeType (value, typeof (System.Int32), provider);
\r
1112 // ========== Int64 Conversions ========== //
\r
1114 public static long ToInt64 (bool value)
\r
1116 return value ? 1 : 0;
\r
1119 public static long ToInt64 (byte value)
\r
1121 return (long)value;
\r
1124 public static long ToInt64 (char value)
\r
1126 return (long)value;
\r
1129 public static long ToInt64 (DateTime value)
\r
1131 throw new InvalidCastException ("This conversion is not supported.");
\r
1134 public static long ToInt64 (decimal value)
\r
1136 if (value > Int64.MaxValue || value < Int64.MinValue)
\r
1137 throw new OverflowException (Locale.GetText (
\r
1138 "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
\r
1140 // Returned Even-Rounded
\r
1141 return (long)(Math.Round (value));
\r
1144 public static long ToInt64 (double value)
\r
1146 if (value > Int64.MaxValue || value < Int64.MinValue)
\r
1147 throw new OverflowException (Locale.GetText (
\r
1148 "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
\r
1150 // Returned Even-Rounded
\r
1151 return (long)(Math.Round (value));
\r
1154 public static long ToInt64 (float value)
\r
1156 if (value > Int64.MaxValue || value < Int64.MinValue)
\r
1157 throw new OverflowException (Locale.GetText (
\r
1158 "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
\r
1160 // Returned Even-Rounded, pass to Math as a double, could
\r
1161 // just call Convert.ToInt64 ( (double)value);
\r
1162 return (long)(Math.Round ( (double)value));
\r
1165 public static long ToInt64 (int value)
\r
1167 return (long)value;
\r
1170 public static long ToInt64 (long value)
\r
1175 [CLSCompliant (false)]
\r
1176 public static long ToInt64 (sbyte value)
\r
1178 return (long)value;
\r
1181 public static long ToInt64 (short value)
\r
1183 return (long)value;
\r
1186 public static long ToInt64 (string value)
\r
1188 return Int64.Parse (value);
\r
1191 public static long ToInt64 (string value, IFormatProvider provider)
\r
1193 return Int64.Parse (value, provider);
\r
1196 public static long ToInt64 (string value, int fromBase)
\r
1198 if (NotValidBase (fromBase))
\r
1199 throw new ArgumentException ("fromBase is not valid.");
\r
1201 return (long) ConvertFromBase (value, fromBase);
\r
1204 [CLSCompliant (false)]
\r
1205 public static long ToInt64 (uint value)
\r
1207 return (long)value;
\r
1210 [CLSCompliant (false)]
\r
1211 public static long ToInt64 (ulong value)
\r
1213 if (value > Int64.MaxValue)
\r
1214 throw new OverflowException (Locale.GetText (
\r
1215 "Value is greater than Int64.MaxValue"));
\r
1217 return (long)value;
\r
1220 [CLSCompliant (false)]
\r
1221 public static long ToInt64 (ushort value)
\r
1223 return (long)value;
\r
1226 public static long ToInt64 (object value)
\r
1228 return (long) ChangeType (value, typeof (System.Int64));
\r
1231 public static long ToInt64 (object value, IFormatProvider provider)
\r
1233 return (long) ChangeType (value, typeof (System.Int64), provider);
\r
1236 // ========== SByte Conversions ========== //
\r
1238 [CLSCompliant (false)]
\r
1239 public static sbyte ToSByte (bool value)
\r
1241 return (sbyte)(value ? 1 : 0);
\r
1244 [CLSCompliant (false)]
\r
1245 public static sbyte ToSByte (byte value)
\r
1247 if (value > SByte.MaxValue)
\r
1248 throw new OverflowException (Locale.GetText (
\r
1249 "Value is greater than SByte.MaxValue"));
\r
1251 return (sbyte)value;
\r
1254 [CLSCompliant (false)]
\r
1255 public static sbyte ToSByte (char value)
\r
1257 if (value > SByte.MaxValue)
\r
1258 throw new OverflowException (Locale.GetText (
\r
1259 "Value is greater than SByte.MaxValue"));
\r
1261 return (sbyte)value;
\r
1264 [CLSCompliant (false)]
\r
1265 public static sbyte ToSByte (DateTime value)
\r
1267 throw new InvalidCastException ("This conversion is not supported.");
\r
1270 [CLSCompliant (false)]
\r
1271 public static sbyte ToSByte (decimal value)
\r
1273 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1274 throw new OverflowException (Locale.GetText (
\r
1275 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1277 // Returned Even-Rounded
\r
1278 return (sbyte)(Math.Round (value));
\r
1281 [CLSCompliant (false)]
\r
1282 public static sbyte ToSByte (double value)
\r
1284 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1285 throw new OverflowException (Locale.GetText (
\r
1286 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1288 // Returned Even-Rounded
\r
1289 return (sbyte)(Math.Round (value));
\r
1292 [CLSCompliant (false)]
\r
1293 public static sbyte ToSByte (float value)
\r
1295 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1296 throw new OverflowException (Locale.GetText (
\r
1297 "Value is greater than SByte.MaxValue or less than SByte.Minalue"));
\r
1299 // Returned Even-Rounded, pass as double to Math
\r
1300 return (sbyte)(Math.Round ( (double)value));
\r
1303 [CLSCompliant (false)]
\r
1304 public static sbyte ToSByte (int value)
\r
1306 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1307 throw new OverflowException (Locale.GetText (
\r
1308 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1310 return (sbyte)value;
\r
1313 [CLSCompliant (false)]
\r
1314 public static sbyte ToSByte (long value)
\r
1316 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1317 throw new OverflowException (Locale.GetText (
\r
1318 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1320 return (sbyte)value;
\r
1323 [CLSCompliant (false)]
\r
1324 public static sbyte ToSByte (sbyte value)
\r
1329 [CLSCompliant (false)]
\r
1330 public static sbyte ToSByte (short value)
\r
1332 if (value > SByte.MaxValue || value < SByte.MinValue)
\r
1333 throw new OverflowException (Locale.GetText (
\r
1334 "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
\r
1336 return (sbyte)value;
\r
1339 [CLSCompliant (false)]
\r
1340 public static sbyte ToSByte (string value)
\r
1342 return SByte.Parse (value);
\r
1345 [CLSCompliant (false)]
\r
1346 public static sbyte ToSByte (string value, IFormatProvider provider)
\r
1348 return SByte.Parse (value, provider);
\r
1351 [CLSCompliant (false)]
\r
1352 public static sbyte ToSByte (string value, int fromBase)
\r
1354 return (sbyte) ConvertFromBase (value, fromBase);
\r
1357 [CLSCompliant (false)]
\r
1358 public static sbyte ToSByte (uint value)
\r
1360 if (value > SByte.MaxValue)
\r
1361 throw new OverflowException (Locale.GetText (
\r
1362 "Value is greater than SByte.MaxValue"));
\r
1364 return (sbyte)value;
\r
1367 [CLSCompliant (false)]
\r
1368 public static sbyte ToSByte (ulong value)
\r
1370 if (value > (ulong)SByte.MaxValue)
\r
1371 throw new OverflowException (Locale.GetText (
\r
1372 "Value is greater than SByte.MaxValue"));
\r
1374 return (sbyte)value;
\r
1377 [CLSCompliant (false)]
\r
1378 public static sbyte ToSByte (ushort value)
\r
1380 if (value > SByte.MaxValue)
\r
1381 throw new OverflowException (Locale.GetText (
\r
1382 "Value is greater than SByte.MaxValue"));
\r
1384 return (sbyte)value;
\r
1387 [CLSCompliant (false)]
\r
1388 public static sbyte ToSByte (object value)
\r
1390 return (sbyte) ChangeType (value, typeof (System.SByte));
\r
1393 [CLSCompliant (false)]
\r
1394 public static sbyte ToSByte (object value, IFormatProvider provider)
\r
1396 return (sbyte) ChangeType (value, typeof (System.SByte), provider);
\r
1399 // ========== Single Conversions ========== //
\r
1401 public static float ToSingle (bool value)
\r
1403 return value ? 1 : 0;
\r
1406 public static float ToSingle (byte value)
\r
1408 return (float)value;
\r
1411 public static float ToSingle (Char value)
\r
1413 throw new InvalidCastException ("This conversion is not supported.");
\r
1416 public static float ToSingle (DateTime value)
\r
1418 throw new InvalidCastException ("This conversion is not supported.");
\r
1421 public static float ToSingle (decimal value)
\r
1423 return (float)value;
\r
1426 public static float ToSingle (double value)
\r
1428 if (value > Single.MaxValue || value < Single.MinValue)
\r
1429 throw new OverflowException (Locale.GetText (
\r
1430 "Value is greater than Single.MaxValue or less than Single.MinValue"));
\r
1432 return (float)value;
\r
1435 public static float ToSingle (float value)
\r
1440 public static float ToSingle (int value)
\r
1442 return (float)value;
\r
1445 public static float ToSingle (long value)
\r
1447 return (float)value;
\r
1450 [CLSCompliant (false)]
\r
1451 public static float ToSingle (sbyte value)
\r
1453 return (float)value;
\r
1456 public static float ToSingle (short value)
\r
1458 return (float)value;
\r
1461 public static float ToSingle (string value)
\r
1463 return Single.Parse (value);
\r
1466 public static float ToSingle (string value, IFormatProvider provider)
\r
1468 return Single.Parse (value, provider);
\r
1471 [CLSCompliant (false)]
\r
1472 public static float ToSingle (uint value)
\r
1474 return (float)value;
\r
1477 [CLSCompliant (false)]
\r
1478 public static float ToSingle (ulong value)
\r
1480 return (float)value;
\r
1483 [CLSCompliant (false)]
\r
1484 public static float ToSingle (ushort value)
\r
1486 return (float)value;
\r
1489 [CLSCompliant (false)]
\r
1490 public static float ToSingle (object value)
\r
1492 return (float) ChangeType (value, typeof (System.Single));
\r
1495 [CLSCompliant (false)]
\r
1496 public static float ToSingle (object value, IFormatProvider provider)
\r
1498 return (float) ChangeType (value, typeof (System.Single), provider);
\r
1501 // ========== String Conversions ========== //
\r
1503 public static string ToString (bool value)
\r
1505 return value.ToString ();
\r
1508 public static string ToString (bool value, IFormatProvider provider)
\r
1510 return value.ToString (); // the same as ToString (bool).
\r
1513 public static string ToString (byte value)
\r
1515 return value.ToString ();
\r
1518 public static string ToString (byte value, IFormatProvider provider)
\r
1520 return value.ToString (provider);
\r
1523 public static string ToString (byte value, int toBase)
\r
1525 if (NotValidBase (toBase))
\r
1526 throw new ArgumentException ("toBase is not valid.");
\r
1528 return ConvertToBase ((int) value, toBase);
\r
1531 public static string ToString (char value)
\r
1533 return value.ToString ();
\r
1536 public static string ToString (char value, IFormatProvider provider)
\r
1538 return value.ToString (); // the same as ToString (char)
\r
1541 public static string ToString (DateTime value)
\r
1543 return value.ToString ();
\r
1546 public static string ToString (DateTime value, IFormatProvider provider)
\r
1548 return value.ToString (provider);
\r
1551 public static string ToString (decimal value)
\r
1553 return value.ToString ();
\r
1556 public static string ToString (decimal value, IFormatProvider provider)
\r
1558 return value.ToString (provider);
\r
1561 public static string ToString (double value)
\r
1563 return value.ToString ();
\r
1566 public static string ToString (double value, IFormatProvider provider)
\r
1568 return value.ToString (provider);
\r
1571 public static string ToString (float value)
\r
1573 return value.ToString ();
\r
1576 public static string ToString (float value, IFormatProvider provider)
\r
1578 return value.ToString (provider);
\r
1581 public static string ToString (int value)
\r
1583 return value.ToString ();
\r
1586 public static string ToString (int value, int fromBase)
\r
1588 int retVal = ConvertFromBase (value.ToString (), fromBase);
\r
1589 return retVal.ToString ();
\r
1592 public static string ToString (int value, IFormatProvider provider)
\r
1594 return value.ToString (provider);
\r
1597 public static string ToString (long value)
\r
1599 return value.ToString ();
\r
1602 public static string ToString (long value, int fromBase)
\r
1604 return (ConvertFromBase (value.ToString (), fromBase)).ToString ();
\r
1607 public static string ToString (long value, IFormatProvider provider)
\r
1609 return value.ToString (provider);
\r
1612 public static string ToString (object value)
\r
1614 return (string) ChangeType (value, typeof (System.String));
\r
1617 public static string ToString (object value, IFormatProvider provider)
\r
1619 return (string) ChangeType (value, typeof (System.String), provider);
\r
1622 public static string ToString (sbyte value)
\r
1624 return value.ToString ();
\r
1627 public static string ToString (sbyte value, IFormatProvider provider)
\r
1629 return value.ToString (provider);
\r
1632 public static string ToString (short value)
\r
1634 return value.ToString ();
\r
1637 public static string ToString (short value, int fromBase)
\r
1639 return (ConvertFromBase (value.ToString (), fromBase)).ToString ();
\r
1642 public static string ToString (short value, IFormatProvider provider)
\r
1644 return value.ToString (provider);
\r
1647 public static string ToString (string value)
\r
1652 public static string ToString (string value, IFormatProvider provider)
\r
1654 return value; // provider is ignored.
\r
1657 [CLSCompliant (false)]
\r
1658 public static string ToString (uint value)
\r
1660 return value.ToString ();
\r
1663 [CLSCompliant (false)]
\r
1664 public static string ToString (uint value, IFormatProvider provider)
\r
1666 return value.ToString (provider);
\r
1669 [CLSCompliant (false)]
\r
1670 public static string ToString (ulong value)
\r
1672 return value.ToString ();
\r
1675 [CLSCompliant (false)]
\r
1676 public static string ToString (ulong value, IFormatProvider provider)
\r
1678 return value.ToString (provider);
\r
1681 [CLSCompliant (false)]
\r
1682 public static string ToString (ushort value)
\r
1684 return value.ToString ();
\r
1687 [CLSCompliant (false)]
\r
1688 public static string ToString (ushort value, IFormatProvider provider)
\r
1690 return value.ToString (provider);
\r
1693 // ========== UInt16 Conversions ========== //
\r
1695 [CLSCompliant (false)]
\r
1696 public static ushort ToUInt16 (bool value)
\r
1698 return (ushort)(value ? 1 : 0);
\r
1701 [CLSCompliant (false)]
\r
1702 public static ushort ToUInt16 (byte value)
\r
1704 return (ushort)value;
\r
1707 [CLSCompliant (false)]
\r
1708 public static ushort ToUInt16 (char value)
\r
1710 return (ushort)value;
\r
1713 [CLSCompliant (false)]
\r
1714 public static ushort ToUInt16 (DateTime value)
\r
1716 throw new InvalidCastException ("This conversion is not supported.");
\r
1719 [CLSCompliant (false)]
\r
1720 public static ushort ToUInt16 (decimal value)
\r
1722 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1723 throw new OverflowException (Locale.GetText (
\r
1724 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1726 // Returned Even-Rounded
\r
1727 return (ushort)(Math.Round (value));
\r
1730 [CLSCompliant (false)]
\r
1731 public static ushort ToUInt16 (double value)
\r
1733 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1734 throw new OverflowException (Locale.GetText (
\r
1735 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1737 // Returned Even-Rounded
\r
1738 return (ushort)(Math.Round (value));
\r
1741 [CLSCompliant (false)]
\r
1742 public static ushort ToUInt16 (float value)
\r
1744 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1745 throw new OverflowException (Locale.GetText (
\r
1746 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1748 // Returned Even-Rounded, pass as double to Math
\r
1749 return (ushort)(Math.Round ( (double)value));
\r
1752 [CLSCompliant (false)]
\r
1753 public static ushort ToUInt16 (int value)
\r
1755 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1756 throw new OverflowException (Locale.GetText (
\r
1757 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1759 return (ushort)value;
\r
1762 [CLSCompliant (false)]
\r
1763 public static ushort ToUInt16 (long value)
\r
1765 if (value > UInt16.MaxValue || value < UInt16.MinValue)
\r
1766 throw new OverflowException (Locale.GetText (
\r
1767 "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
\r
1769 return (ushort)value;
\r
1772 [CLSCompliant (false)]
\r
1773 public static ushort ToUInt16 (sbyte value)
\r
1775 if (value < UInt16.MinValue)
\r
1776 throw new OverflowException (Locale.GetText (
\r
1777 "Value is less than UInt16.MinValue"));
\r
1779 return (ushort)value;
\r
1782 [CLSCompliant (false)]
\r
1783 public static ushort ToUInt16 (short value)
\r
1785 if (value < UInt16.MinValue)
\r
1786 throw new OverflowException (Locale.GetText (
\r
1787 "Value is less than UInt16.MinValue"));
\r
1789 return (ushort)value;
\r
1792 [CLSCompliant (false)]
\r
1793 public static ushort ToUInt16 (string value)
\r
1795 return UInt16.Parse (value);
\r
1798 [CLSCompliant (false)]
\r
1799 public static ushort ToUInt16 (string value, IFormatProvider provider)
\r
1801 return UInt16.Parse (value, provider);
\r
1804 [CLSCompliant (false)]
\r
1805 public static ushort ToUInt16 (string value, int fromBase)
\r
1807 return (ushort) ConvertFromBase (value, fromBase);
\r
1810 [CLSCompliant (false)]
\r
1811 public static ushort ToUInt16 (uint value)
\r
1813 if (value > UInt16.MaxValue)
\r
1814 throw new OverflowException (Locale.GetText (
\r
1815 "Value is greater than UInt16.MaxValue"));
\r
1817 return (ushort)value;
\r
1820 [CLSCompliant (false)]
\r
1821 public static ushort ToUInt16 (ulong value)
\r
1823 if (value > (ulong)UInt16.MaxValue)
\r
1824 throw new OverflowException (Locale.GetText (
\r
1825 "Value is greater than UInt16.MaxValue"));
\r
1827 return (ushort)value;
\r
1830 [CLSCompliant (false)]
\r
1831 public static ushort ToUInt16 (ushort value)
\r
1836 [CLSCompliant (false)]
\r
1837 public static ushort ToUInt16 (object value)
\r
1839 return (ushort) ChangeType (value, typeof (System.UInt16));
\r
1842 [CLSCompliant (false)]
\r
1843 public static ushort ToUInt16 (object value, IFormatProvider provider)
\r
1845 return (ushort) ChangeType (value, typeof (System.UInt16), provider);
\r
1848 // ========== UInt32 Conversions ========== //
\r
1850 [CLSCompliant (false)]
\r
1851 public static uint ToUInt32 (bool value)
\r
1853 return (uint)(value ? 1 : 0);
\r
1856 [CLSCompliant (false)]
\r
1857 public static uint ToUInt32 (byte value)
\r
1859 return (uint)value;
\r
1862 [CLSCompliant (false)]
\r
1863 public static uint ToUInt32 (char value)
\r
1865 return (uint)value;
\r
1868 [CLSCompliant (false)]
\r
1869 public static uint ToUInt32 (DateTime value)
\r
1871 throw new InvalidCastException ("This conversion is not supported.");
\r
1874 [CLSCompliant (false)]
\r
1875 public static uint ToUInt32 (decimal value)
\r
1877 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1878 throw new OverflowException (Locale.GetText (
\r
1879 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1881 // Returned Even-Rounded
\r
1882 return (uint)(Math.Round (value));
\r
1885 [CLSCompliant (false)]
\r
1886 public static uint ToUInt32 (double value)
\r
1888 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1889 throw new OverflowException (Locale.GetText (
\r
1890 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1892 // Returned Even-Rounded
\r
1893 return (uint)(Math.Round (value));
\r
1896 [CLSCompliant (false)]
\r
1897 public static uint ToUInt32 (float value)
\r
1899 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1900 throw new OverflowException (Locale.GetText (
\r
1901 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1903 // Returned Even-Rounded, pass as double to Math
\r
1904 return (uint)(Math.Round ( (double)value));
\r
1907 [CLSCompliant (false)]
\r
1908 public static uint ToUInt32 (int value)
\r
1910 if (value < UInt32.MinValue)
\r
1911 throw new OverflowException (Locale.GetText (
\r
1912 "Value is less than UInt32.MinValue"));
\r
1914 return (uint)value;
\r
1917 [CLSCompliant (false)]
\r
1918 public static uint ToUInt32 (long value)
\r
1920 if (value > UInt32.MaxValue || value < UInt32.MinValue)
\r
1921 throw new OverflowException (Locale.GetText (
\r
1922 "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
\r
1924 return (uint)value;
\r
1927 [CLSCompliant (false)]
\r
1928 public static uint ToUInt32 (sbyte value)
\r
1930 if (value < UInt32.MinValue)
\r
1931 throw new OverflowException (Locale.GetText (
\r
1932 "Value is less than UInt32.MinValue"));
\r
1934 return (uint)value;
\r
1937 [CLSCompliant (false)]
\r
1938 public static uint ToUInt32 (short value)
\r
1940 if (value < UInt32.MinValue)
\r
1941 throw new OverflowException (Locale.GetText (
\r
1942 "Value is less than UInt32.MinValue"));
\r
1944 return (uint)value;
\r
1947 [CLSCompliant (false)]
\r
1948 public static uint ToUInt32 (string value)
\r
1950 return UInt32.Parse (value);
\r
1953 [CLSCompliant (false)]
\r
1954 public static uint ToUInt32 (string value, IFormatProvider provider)
\r
1956 return UInt32.Parse (value, provider);
\r
1959 [CLSCompliant (false)]
\r
1960 public static uint ToUInt32 (string value, int fromBase)
\r
1962 return (uint) ConvertFromBase (value, fromBase);
\r
1965 [CLSCompliant (false)]
\r
1966 public static uint ToUInt32 (uint value)
\r
1971 [CLSCompliant (false)]
\r
1972 public static uint ToUInt32 (ulong value)
\r
1974 if (value > UInt32.MaxValue)
\r
1975 throw new OverflowException (Locale.GetText (
\r
1976 "Value is greater than UInt32.MaxValue"));
\r
1978 return (uint)value;
\r
1981 [CLSCompliant (false)]
\r
1982 public static uint ToUInt32 (ushort value)
\r
1984 return (uint)value;
\r
1987 [CLSCompliant (false)]
\r
1988 public static uint ToUInt32 (object value)
\r
1990 return (uint) ChangeType (value, typeof (System.UInt32));
\r
1993 [CLSCompliant (false)]
\r
1994 public static uint ToUInt32 (object value, IFormatProvider provider)
\r
1996 return (uint) ChangeType (value, typeof (System.UInt32), provider);
\r
2000 // ========== UInt64 Conversions ========== //
\r
2002 [CLSCompliant (false)]
\r
2003 public static ulong ToUInt64 (bool value)
\r
2005 return (ulong)(value ? 1 : 0);
\r
2008 [CLSCompliant (false)]
\r
2009 public static ulong ToUInt64 (byte value)
\r
2011 return (ulong)value;
\r
2014 [CLSCompliant (false)]
\r
2015 public static ulong ToUInt64 (char value)
\r
2017 return (ulong)value;
\r
2020 [CLSCompliant (false)]
\r
2021 public static ulong ToUInt64 (DateTime value)
\r
2023 throw new InvalidCastException ("The conversion is not supported.");
\r
2026 [CLSCompliant (false)]
\r
2027 public static ulong ToUInt64 (decimal value)
\r
2029 if (value > UInt64.MaxValue || value < UInt64.MinValue)
\r
2030 throw new OverflowException (Locale.GetText (
\r
2031 "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
\r
2033 // Returned Even-Rounded
\r
2034 return (ulong)(Math.Round (value));
\r
2037 [CLSCompliant (false)]
\r
2038 public static ulong ToUInt64 (double value)
\r
2040 if (value > UInt64.MaxValue || value < UInt64.MinValue)
\r
2041 throw new OverflowException (Locale.GetText (
\r
2042 "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
\r
2044 // Returned Even-Rounded
\r
2045 return (ulong)(Math.Round (value));
\r
2048 [CLSCompliant (false)]
\r
2049 public static ulong ToUInt64 (float value)
\r
2051 if (value > UInt64.MaxValue || value < UInt64.MinValue)
\r
2052 throw new OverflowException (Locale.GetText (
\r
2053 "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
\r
2055 // Returned Even-Rounded, pass as a double to Math
\r
2056 return (ulong)(Math.Round ( (double)value));
\r
2059 [CLSCompliant (false)]
\r
2060 public static ulong ToUInt64 (int value)
\r
2062 if (value < (int)UInt64.MinValue)
\r
2063 throw new OverflowException (Locale.GetText (
\r
2064 "Value is less than UInt64.MinValue"));
\r
2066 return (ulong)value;
\r
2069 [CLSCompliant (false)]
\r
2070 public static ulong ToUInt64 (long value)
\r
2072 if (value < (long)UInt64.MinValue)
\r
2073 throw new OverflowException (Locale.GetText (
\r
2074 "Value is less than UInt64.MinValue"));
\r
2076 return (ulong)value;
\r
2079 [CLSCompliant (false)]
\r
2080 public static ulong ToUInt64 (sbyte value)
\r
2082 if (value < (sbyte)UInt64.MinValue)
\r
2083 throw new OverflowException
\r
2084 ("Value is less than UInt64.MinValue");
\r
2086 return (ulong)value;
\r
2089 [CLSCompliant (false)]
\r
2090 public static ulong ToUInt64 (short value)
\r
2092 if (value < (short)UInt64.MinValue)
\r
2093 throw new OverflowException (Locale.GetText (
\r
2094 "Value is less than UInt64.MinValue"));
\r
2096 return (ulong)value;
\r
2099 [CLSCompliant (false)]
\r
2100 public static ulong ToUInt64 (string value)
\r
2102 return UInt64.Parse (value);
\r
2105 [CLSCompliant (false)]
\r
2106 public static ulong ToUInt64 (string value, IFormatProvider provider)
\r
2108 return UInt64.Parse (value, provider);
\r
2111 [CLSCompliant (false)]
\r
2112 public static ulong ToUInt64 (string value, int fromBase)
\r
2114 return (ulong) ConvertFromBase (value, fromBase);
\r
2117 [CLSCompliant (false)]
\r
2118 public static ulong ToUInt64 (uint value)
\r
2120 return (ulong)value;
\r
2123 [CLSCompliant (false)]
\r
2124 public static ulong ToUInt64 (ulong value)
\r
2129 [CLSCompliant (false)]
\r
2130 public static ulong ToUInt64 (ushort value)
\r
2132 return (ulong)value;
\r
2135 [CLSCompliant (false)]
\r
2136 public static ulong ToUInt64 (object value)
\r
2138 return (ulong) ChangeType (value, typeof (System.UInt64));
\r
2141 [CLSCompliant (false)]
\r
2142 public static ulong ToUInt64 (object value, IFormatProvider provider)
\r
2144 return (ulong) ChangeType (value, typeof (System.UInt64), provider);
\r
2148 // ========== Conversion / Helper Functions ========== //
\r
2150 public static object ChangeType (object value, Type conversionType)
\r
2152 CultureInfo ci = CultureInfo.CurrentCulture;
\r
2153 NumberFormatInfo number = ci.NumberFormat;
\r
2154 return ToType (value, conversionType, number);
\r
2157 public static object ChangeType (object value, TypeCode typeCode)
\r
2159 CultureInfo ci = CultureInfo.CurrentCulture;
\r
2160 Type conversionType = conversionTable [(int)typeCode];
\r
2161 NumberFormatInfo number = ci.NumberFormat;
\r
2162 return ToType (value, conversionType, number);
\r
2165 public static object ChangeType (object value, Type conversionType, IFormatProvider provider)
\r
2167 return ToType (value, conversionType, provider);
\r
2170 public static object ChangeType (object value, TypeCode typeCode, IFormatProvider provider)
\r
2172 Type conversionType = conversionTable [(int)typeCode];
\r
2173 return ToType (value, conversionType, provider);
\r
2176 private static bool NotValidBase (int value)
\r
2178 if ((value == 2) || (value == 8) ||
\r
2179 (value == 10) || (value == 16))
\r
2185 private static int ConvertFromBase (string value, int fromBase)
\r
2187 if (NotValidBase (fromBase))
\r
2188 throw new ArgumentException ("fromBase is not valid.");
\r
2192 foreach (char c in value) {
\r
2193 if (Char.IsLetter (c))
\r
2194 result = (fromBase) * result + c - 'a' + 10;
\r
2196 result = (fromBase) * result + c - '0';
\r
2201 private static string ConvertToBase (int value, int toBase)
\r
2203 StringBuilder sb = new StringBuilder ();
\r
2204 BuildConvertedString (sb, value, toBase);
\r
2205 return sb.ToString ();
\r
2208 internal static void BuildConvertedString (StringBuilder sb, int value, int toBase)
\r
2210 int divided = value / toBase;
\r
2211 int reminder = value % toBase;
\r
2214 BuildConvertedString (sb, divided, toBase);
\r
2216 if (reminder >= 10)
\r
2217 sb.Append ((char) (reminder + 'a' - 10));
\r
2219 sb.Append ((char) (reminder + '0'));
\r
2221 // Lookup table for the conversion ToType method. Order
\r
2222 // is important! Used by ToType for comparing the target
\r
2223 // type, and uses hardcoded array indexes.
\r
2224 private static Type[] conversionTable = {
\r
2225 // Valid ICovnertible Types
\r
2226 typeof (Boolean), // 0 TypeCode.Boolean
\r
2227 typeof (Byte), // 1 TypeCode.Byte
\r
2228 typeof (Char), // 2 TypeCode.Char
\r
2229 typeof (DateTime), // 3 TypeCode.DateTime
\r
2230 typeof (Decimal), // 4 TypeCode.Decimal
\r
2231 typeof (Double), // 5 TypeCode.Double
\r
2232 typeof (Int16), // 6 TypeCode.Int16
\r
2233 typeof (Int32), // 7 TypeCode.Int32
\r
2234 typeof (Int64), // 8 TypeCode.Int64
\r
2235 typeof (SByte), // 9 TypeCode.Sbyte
\r
2236 typeof (Single), // 10 TypeCode.Single
\r
2237 typeof (String), // 11 TypeCode.String
\r
2238 typeof (UInt16), // 12 TypeCode.UInt16
\r
2239 typeof (UInt32), // 13 TypeCode.UInt32
\r
2240 typeof (UInt64), // 14 TypeCode.UInt64
\r
2242 // Invalid IConvertible Interface Types
\r
2243 typeof (Object) // 15 TypeCode.Object
\r
2246 // Function to convert an object to another type and return
\r
2247 // it as an object. In place for the core data types to use
\r
2248 // when implementing IConvertible. Uses hardcoded indexes in
\r
2249 // the conversionTypes array, so if modify carefully.
\r
2250 internal static object ToType (object value, Type conversionType,
\r
2251 IFormatProvider provider)
\r
2253 if (value == null)
\r
2254 throw new ArgumentException (Locale.GetText (
\r
2255 "Invalid conversion from null value"));
\r
2257 if (value is IConvertible) {
\r
2258 IConvertible convertValue = (IConvertible)value;
\r
2260 if (conversionType == conversionTable[0]) {
\r
2261 // 0 TypeCode.Boolean
\r
2262 return (object)(convertValue.ToBoolean (provider));
\r
2264 } else if (conversionType == conversionTable[1]) {
\r
2265 // 1 TypeCode.Byte
\r
2266 return (object)(convertValue.ToByte (provider));
\r
2268 } else if (conversionType == conversionTable[2]) {
\r
2269 // 2 TypeCode.Char
\r
2270 return (object)(convertValue.ToChar (provider));
\r
2272 } else if (conversionType == conversionTable[3]) {
\r
2273 // 3 TypeCode.DateTime
\r
2274 return (object)(convertValue.ToDateTime (provider));
\r
2276 } else if (conversionType == conversionTable[4]) {
\r
2277 // 4 TypeCode.Decimal
\r
2278 return (object)(convertValue.ToDecimal (provider));
\r
2280 } else if (conversionType == conversionTable[5]) {
\r
2281 // 5 TypeCode.Double
\r
2282 return (object)(convertValue.ToDouble (provider));
\r
2284 } else if (conversionType == conversionTable[6]) {
\r
2285 // 6 TypeCode.Int16
\r
2286 return (object)(convertValue.ToInt16 (provider));
\r
2288 } else if (conversionType == conversionTable[7]) {
\r
2289 // 7 TypeCode.Int32
\r
2290 return (object)(convertValue.ToInt32 (provider));
\r
2292 } else if (conversionType == conversionTable[8]) {
\r
2293 // 8 TypeCode.Int64
\r
2294 return (object)(convertValue.ToInt64 (provider));
\r
2296 } else if (conversionType == conversionTable[9]) {
\r
2297 // 9 TypeCode.Sbyte
\r
2298 return (object)(convertValue.ToSByte (provider));
\r
2300 } else if (conversionType == conversionTable[10]) {
\r
2301 // 10 TypeCode.Single
\r
2302 return (object)(convertValue.ToSingle (provider));
\r
2304 } else if (conversionType == conversionTable[11]) {
\r
2305 // 11 TypeCode.String
\r
2306 return (object)(convertValue.ToString (provider));
\r
2308 } else if (conversionType == conversionTable[12]) {
\r
2309 // 12 TypeCode.UInt16
\r
2310 return (object)(convertValue.ToUInt16 (provider));
\r
2312 } else if (conversionType == conversionTable[13]) {
\r
2313 // 13 TypeCode.UInt32
\r
2314 return (object)(convertValue.ToUInt32 (provider));
\r
2316 } else if (conversionType == conversionTable[14]) {
\r
2317 // 14 TypeCode.UInt64
\r
2318 return (object)(convertValue.ToUInt64 (provider));
\r
2320 } else if (conversionType == conversionTable[15]) {
\r
2321 // 15 TypeCode.Object
\r
2322 return (object)(value);
\r
2325 // Not in the conversion table
\r
2326 throw new InvalidCastException (Locale.GetText (
\r
2327 "Unknown target conversion type"));
\r
2330 // Value is not IConvertible
\r
2331 throw new ArgumentException (Locale.GetText (
\r
2332 "Value is not a convertible object: "+ value.GetType().ToString()+" to "+conversionType.ToString()));
\r