From e0b711beaf43eb503a3b66bad81e79a64479dbd9 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Wed, 9 Oct 2013 14:04:47 +0200 Subject: [PATCH] Enum IConvertible can convert to same enum or System.Enum. Fixes #15289 --- mcs/class/corlib/System/Convert.cs | 4 ++++ mcs/class/corlib/System/Enum.cs | 5 ++--- mcs/class/corlib/Test/System/EnumTest.cs | 7 +++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mcs/class/corlib/System/Convert.cs b/mcs/class/corlib/System/Convert.cs index 7d70ee1f75e..a17181f38ba 100644 --- a/mcs/class/corlib/System/Convert.cs +++ b/mcs/class/corlib/System/Convert.cs @@ -2529,6 +2529,7 @@ namespace System { typeof (DateTime), // 16 TypeCode.DateTime null, // 17 null. typeof (String), // 18 TypeCode.String + typeof (Enum) }; // Function to convert an object to another type and return @@ -2620,6 +2621,9 @@ namespace System { if (conversionType == conversionTable[18]) // 18 TypeCode.String return convertValue.ToString (provider); + if (conversionType == conversionTable[19] && value is Enum) // System.Enum + return value; + if (try_target_to_type) return convertValue.ToType (conversionType, provider); } diff --git a/mcs/class/corlib/System/Enum.cs b/mcs/class/corlib/System/Enum.cs index c16e604d977..ecf2ed18981 100644 --- a/mcs/class/corlib/System/Enum.cs +++ b/mcs/class/corlib/System/Enum.cs @@ -278,9 +278,8 @@ namespace System { if (targetType == null) throw new ArgumentNullException ("targetType"); - if (targetType == typeof (string)) - return ToString (provider); - return Convert.ToType (Value, targetType, provider, false); + + return Convert.ToType (this, targetType, provider, false); } ushort IConvertible.ToUInt16 (IFormatProvider provider) diff --git a/mcs/class/corlib/Test/System/EnumTest.cs b/mcs/class/corlib/Test/System/EnumTest.cs index f6c0dca2a59..973b068e823 100644 --- a/mcs/class/corlib/Test/System/EnumTest.cs +++ b/mcs/class/corlib/Test/System/EnumTest.cs @@ -849,9 +849,12 @@ namespace MonoTests.System } [Test] - public void ConvertToStringType () + public void IConvertible_Valid () { - Assert.AreEqual ("This", ((IConvertible) TestingEnum.This).ToType (typeof (string), null)); + IConvertible ic = TestingEnum.This; + Assert.AreEqual ("This", ic.ToType (typeof (string), null), "#1"); + Assert.AreEqual (TestingEnum.This, ic.ToType (typeof (TestingEnum), null), "#2"); + Assert.AreEqual (TestingEnum.This, ic.ToType (typeof (Enum), null), "#3"); } [Test] -- 2.25.1