diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs index 57e8c28348..b2ff6396c0 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs @@ -291,14 +291,21 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } else { return char.ToLower(type.Name [0]).ToString(); } + } else if (node is ArrayCreateExpression) { + name = "arr"; } else { if (type.Kind == TypeKind.Unknown) return "par"; name = GuessNameFromType(type); } - - name = char.ToLower(name [0]) + name.Substring(1); - return name; + var sb = new StringBuilder (); + sb.Append (char.ToLower(name [0])); + for (int i = 1; i < name.Length; i++) { + var ch = name[i]; + if (char.IsLetterOrDigit (ch) || ch == '_') + sb.Append (ch); + } + return sb.ToString (); } static string GuessNameFromType(IType returnType) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs index f1132ff2f4..ac09dfc9ab 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs @@ -265,5 +265,38 @@ namespace ICSharpCode.NRefactory.CSharp.CodeActions ", 1); } + + /// + /// Bug 9873 - Declare local creates invalid code for implicitly typed array + /// + [Test()] + public void TestBug9873 () + { + TestRefactoringContext.UseExplict = true; + Test (@"class TestClass +{ + void DoStuff() + { + foreach (var i in <-new[] { 1, 2, 3 }->) { + Console.WriteLine (i); + } + } +}", + @"class TestClass +{ + void DoStuff() + { + int[] arr = new[] { + 1, + 2, + 3 + }; + foreach (var i in arr) { + Console.WriteLine (i); + } + } +}"); + } + } }