如何防止ReSharper在内置类型前加上' @'生成代码时的符号?

时间:2015-09-09 16:22:05

标签: c# resharper-9.0 resharper-plugins resharper-sdk

我正在编写一个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执行此操作(我假设其他内置类型或关键字)。

如何阻止它执行此操作并输出有效代码?

1 个答案:

答案 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'当代码样式设置为使用关键字时,但我不确定它是否会起作用=(