From 6df524bb42ee119fe43278e5fc2a5df88efc89a0 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 15 Sep 2017 23:52:42 +0200 Subject: [PATCH] Unpack implicit boxing conversions (casts to object). --- ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs index c289459bb..0e08fd7da 100644 --- a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs +++ b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs @@ -171,8 +171,15 @@ namespace ICSharpCode.Decompiler.CSharp public TranslatedExpression ConvertTo(IType targetType, ExpressionBuilder expressionBuilder, bool checkForOverflow = false, bool allowImplicitConversion = false) { var type = this.Type; - if (type.Equals(targetType)) + if (type.Equals(targetType)) { + // Remove boxing conversion if possible + if (allowImplicitConversion && type.IsKnownType(KnownTypeCode.Object)) { + if (Expression is CastExpression cast && ResolveResult is ConversionResolveResult conversion && conversion.Conversion.IsBoxingConversion) { + return this.UnwrapChild(cast.Expression); + } + } return this; + } var compilation = expressionBuilder.compilation; if (type.IsKnownType(KnownTypeCode.Boolean) && targetType.GetStackType().IsIntegerType()) { // convert from boolean to integer (or enum)