1

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

如何防止它这样做并输出有效代码?

4

1 回答 1

1

如果您想使用关键字“字符串”,则不能使用引号。在模式中使用“字符串”(否则 ReSharper 将尝试转义“字符串”关键字以在标识符位置使用):

public static string $0 (this $1 $2){}

如果您想使用“System.String”,您可以将“$0”显式绑定到 IDeclaredType 以获取字符串:

IPsiModule module;
  factory.CreateTypeMemberDeclaration("public static $0 $1 (this $2 $4){}",module.GetPredefinedType().String,someMethodName, someArgumentType,SomeArgumentName);

在这种情况下,ReSharper 应该遵循代码样式,并在代码样式设置为使用关键字时自动将其替换为“字符串”,但我不确定它是否会起作用 =(

于 2015-09-09T17:18:29.430 回答