diff --git a/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs b/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs index aae1f2016..739cb1188 100644 --- a/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs @@ -406,7 +406,8 @@ namespace ICSharpCode.Decompiler.CSharp protected internal override Statement VisitUsingInstruction(UsingInstruction inst) { - var transformed = TransformToForeach(inst, out var resource); + var resource = exprBuilder.Translate(inst.ResourceExpression).Expression; + var transformed = TransformToForeach(inst, resource); if (transformed != null) return transformed; AstNode usingInit = resource; @@ -420,7 +421,7 @@ namespace ICSharpCode.Decompiler.CSharp AssignVariableNames.GenerateVariableName(currentFunction, disposeType) ); return new BlockStatement { - new ExpressionStatement(new AssignmentExpression(exprBuilder.ConvertVariable(var).Expression, resource?.Detach())), + new ExpressionStatement(new AssignmentExpression(exprBuilder.ConvertVariable(var).Expression, resource.Detach())), new TryCatchStatement { TryBlock = ConvertAsBlock(inst.Body), FinallyBlock = new BlockStatement() { @@ -446,14 +447,12 @@ namespace ICSharpCode.Decompiler.CSharp } } - Statement TransformToForeach(UsingInstruction inst, out Expression resource) + Statement TransformToForeach(UsingInstruction inst, Expression resource) { if (!settings.ForEachStatement) { - resource = null; return null; } // Check if the using resource matches the GetEnumerator pattern. - resource = exprBuilder.Translate(inst.ResourceExpression); var m = getEnumeratorPattern.Match(resource); // The using body must be a BlockContainer. if (!(inst.Body is BlockContainer container) || !m.Success)