diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index 574b18ddc..75036bade 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -379,6 +379,18 @@ namespace ICSharpCode.Decompiler.CSharp UnaryOperatorType.Dereference, target.ConvertTo(new PointerType(type), this)), type); } + + protected internal override ConvertedExpression VisitUnboxAny(UnboxAny inst) + { + var arg = ConvertArgument(inst.Argument); + Expression expr = arg.Expression; + if (arg.Type.IsReferenceType != true) { + // ensure we treat the input as a reference type + expr = arg.ConvertTo(compilation.FindType(KnownTypeCode.Object), this); + } + expr = new CastExpression(ConvertType(inst.Type), expr); + return new ConvertedExpression(expr, cecilMapper.GetType(inst.Type)); + } protected override ConvertedExpression Default(ILInstruction inst) {