diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index 0d55f7e1a..5126bf07d 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -1134,7 +1134,7 @@ namespace ICSharpCode.Decompiler.CSharp for (int i = 0; i < method.Parameters.Count; i++) { var parameter = expectedParameters[i]; var arg = Translate(inst.Arguments[firstParamIndex + i]); - if (parameter.IsParams) { + if (parameter.IsParams && i + 1 == method.Parameters.Count) { // Parameter is marked params // If the argument is an array creation, inline all elements into the call and add missing default values. // Otherwise handle it normally. @@ -1142,22 +1142,22 @@ namespace ICSharpCode.Decompiler.CSharp acrr.SizeArguments.Count == 1 && acrr.SizeArguments[0].IsCompileTimeConstant && acrr.SizeArguments[0].ConstantValue is int length) { - var expectedParametersCopy = expectedParameters.Take(expectedParameters.Count - 1).ToList(); - var argumentsCopy = new List(arguments); + var expandedParameters = expectedParameters.Take(expectedParameters.Count - 1).ToList(); + var expandedArguments = new List(arguments); if (length > 0) { var arrayElements = ((ArrayCreateExpression)arg.Expression).Initializer.Elements.ToArray(); var elementType = ((ArrayType)acrr.Type).ElementType; for (int j = 0; j < length; j++) { - expectedParametersCopy.Add(new DefaultParameter(elementType, parameter.Name + j)); + expandedParameters.Add(new DefaultParameter(elementType, parameter.Name + j)); if (j < arrayElements.Length) - argumentsCopy.Add(new TranslatedExpression(arrayElements[j])); + expandedArguments.Add(new TranslatedExpression(arrayElements[j])); else - argumentsCopy.Add(GetDefaultValueExpression(elementType).WithoutILInstruction()); + expandedArguments.Add(GetDefaultValueExpression(elementType).WithoutILInstruction()); } } - if (IsUnambiguousCall(inst, target, method, Array.Empty(), argumentsCopy) == OverloadResolutionErrors.None) { - expectedParameters = expectedParametersCopy; - arguments = argumentsCopy.SelectList(a => new TranslatedExpression(a.Expression.Detach())); + if (IsUnambiguousCall(inst, target, method, Array.Empty(), expandedArguments) == OverloadResolutionErrors.None) { + expectedParameters = expandedParameters; + arguments = expandedArguments.SelectList(a => new TranslatedExpression(a.Expression.Detach())); continue; } } diff --git a/ICSharpCode.Decompiler/Util/CollectionExtensions.cs b/ICSharpCode.Decompiler/Util/CollectionExtensions.cs index 3263bb735..0223d4f1e 100644 --- a/ICSharpCode.Decompiler/Util/CollectionExtensions.cs +++ b/ICSharpCode.Decompiler/Util/CollectionExtensions.cs @@ -74,7 +74,6 @@ namespace ICSharpCode.Decompiler.Util public static List SelectList(this ICollection collection, Func func) { List result = new List(collection.Count); - int index = 0; foreach (var element in collection) { result.Add(func(element)); }