我正在编写一个ReSharper插件,我想这样做:
CSharpElementFactory factory = CSharpElementFactory.GetInstance(treeNode.GetPsiModule());
factory.CreateTypeMemberDeclaration(
"public static $0 $1 (this $2 $4) { }",
"string",
someMethodName,
someArgumentType,
SomeArgumentName);
我要输出代码:
public static string SomeMethodName(this SomeArgumentType someArgumentName) { }
但它确实输出了这个:
public static @string SomeMethodName(this SomeArgumentType someArgumentName) { }
似乎用int
执行此操作(我假设其他内置类型或关键字)。
如何阻止它执行此操作并输出有效代码?
答案 0 :(得分:1)
如果您想使用关键字' string'你不能用它来引用它。使用'字符串'在模式中(否则ReSharper将尝试转义'字符串'关键字在标识符位置使用):
public static string $0 (this $1 $2){}
如果您想使用' System.String'你可以明确地绑定' $ 0'到IDeclaredType for string:
IPsiModule module;
factory.CreateTypeMemberDeclaration("public static $0 $1 (this $2 $4){}",module.GetPredefinedType().String,someMethodName, someArgumentType,SomeArgumentName);
在这种情况下,ReSharper应遵循代码风格,并自动将其替换为' string'当代码样式设置为使用关键字时,但我不确定它是否会起作用=(