Merge pull request #7081 from yufeih/enum_try_parse
authorWes Haggard <weshaggard@users.noreply.github.com>
Wed, 7 Sep 2016 15:54:26 +0000 (08:54 -0700)
committerGitHub <noreply@github.com>
Wed, 7 Sep 2016 15:54:26 +0000 (08:54 -0700)
Add Enum.TryParse and Enum.Parse<TEnum>

src/mscorlib/model.xml
src/mscorlib/src/System/Enum.cs

index 67db0a0..ac6b95c 100644 (file)
       <Member Name="IsDefined(System.Type,System.Object)" />
       <Member Name="Parse(System.Type,System.String)" />
       <Member Name="Parse(System.Type,System.String,System.Boolean)" />
+      <Member Name="Parse&lt;TEnum&gt;(System.String)" />
+      <Member Name="Parse&lt;TEnum&gt;(System.String,System.Boolean)" />
       <Member Name="ToObject(System.Type,System.Byte)" />
       <Member Name="ToObject(System.Type,System.Int16)" />
       <Member Name="ToObject(System.Type,System.Int32)" />
       <Member Name="ToString(System.IFormatProvider)" />
       <Member Name="ToString(System.String)" />
       <Member Name="ToString(System.String,System.IFormatProvider)" />
+      <Member Name="TryParse(System.Type,System.String,System.Object@)" />
+      <Member Name="TryParse(System.Type,System.String,System.Boolean,System.Object@)" />
       <Member Name="TryParse&lt;TEnum&gt;(System.String,TEnum@)" />
       <Member Name="TryParse&lt;TEnum&gt;(System.String,System.Boolean,TEnum@)" />
     </Type>
index a810455..e998f7e 100644 (file)
@@ -334,6 +334,22 @@ namespace System
             }
         }
 
+        public static bool TryParse(Type enumType, String value, out Object result)
+        {
+            return TryParse(enumType, value, false, out result);
+        }
+
+        public static bool TryParse(Type enumType, String value, bool ignoreCase, out Object result)
+        {
+            result = null;
+            EnumResult parseResult = new EnumResult();
+            bool retValue;
+
+            if (retValue = TryParseEnum(enumType, value, ignoreCase, ref parseResult))
+                result = parseResult.parsedEnum;
+            return retValue;
+        }
+
         public static bool TryParse<TEnum>(String value, out TEnum result) where TEnum : struct
         {
             return TryParse(value, false, out result);
@@ -366,6 +382,20 @@ namespace System
                 throw parseResult.GetEnumParseException();
         }
 
+        public static TEnum Parse<TEnum>(String value)
+        {
+            return Parse<TEnum>(value, false);
+        }
+
+        public static TEnum Parse<TEnum>(String value, bool ignoreCase)
+        {
+            EnumResult parseResult = new EnumResult() { canThrow = true };
+            if (TryParseEnum(typeof(TEnum), value, ignoreCase, ref parseResult))
+                return (TEnum)parseResult.parsedEnum;
+            else
+                throw parseResult.GetEnumParseException();
+        }
+
         private static bool TryParseEnum(Type enumType, String value, bool ignoreCase, ref EnumResult parseResult)
         {
             if (enumType == null)