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);
+ }
+ }
+}");
+ }
+
}
}