diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs index f634f266c8..ca8e7e1679 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs @@ -1260,7 +1260,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver { if (c == Conversion.IdentityConversion) return rr; - else if (rr.IsCompileTimeConstant && c != Conversion.None) + else if (rr.IsCompileTimeConstant && c != Conversion.None && !c.IsUserDefined) return ResolveCast(targetType, rr); else return new ConversionResolveResult(targetType, rr, c, checkForOverflow); @@ -1269,7 +1269,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver public ResolveResult ResolveCast(IType targetType, ResolveResult expression) { // C# 4.0 spec: ยง7.7.6 Cast expressions - if (expression.IsCompileTimeConstant) { + Conversion c = conversions.ExplicitConversion(expression, targetType); + if (expression.IsCompileTimeConstant && !c.IsUserDefined) { TypeCode code = ReflectionHelper.GetTypeCode(targetType); if (code >= TypeCode.Boolean && code <= TypeCode.Decimal && expression.ConstantValue != null) { try { @@ -1293,7 +1294,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } } } - Conversion c = conversions.ExplicitConversion(expression, targetType); return new ConversionResolveResult(targetType, expression, c, checkForOverflow); }