2010-02-22 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Tue, 23 Feb 2010 01:01:19 +0000 (01:01 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Tue, 23 Feb 2010 01:01:19 +0000 (01:01 -0000)
* Type.cs:  Implement new v4 GetEnumUnderlyingType ().

svn path=/trunk/mcs/; revision=152241

mcs/class/corlib/System/ChangeLog
mcs/class/corlib/System/Type.cs

index dd9f92ba2e9b82a136ff868860c44387afdecedc..f8ebed5e205c106167aeae6e57be3093e2759396 100644 (file)
@@ -1,3 +1,7 @@
+2010-02-22 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * Type.cs:  Implement new v4 GetEnumUnderlyingType ().
+
 2010-02-22 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * Type.cs: Implement new v4 GetTypeCodeImpl ().
index 1ddd155856a6d531ff971554c338814cef595ae4..192fb669a15e8b96c1e5f8271f995fef08131060 100644 (file)
@@ -454,6 +454,19 @@ namespace System {
                {
                        return !Object.ReferenceEquals (left, right);
                }
+
+
+               public virtual Type GetEnumUnderlyingType () {
+                       if (!IsEnum)
+                               throw new ArgumentException ("Type is not an enumeration", "enumType");
+
+                       var fields = GetFields (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+
+                       if (fields == null || fields.Length != 1)
+                               throw new ArgumentException ("An enum must have exactly one instance field", "enumType");
+
+                       return fields [0].FieldType;
+               }
 #endif
                
                [MethodImplAttribute(MethodImplOptions.InternalCall)]