Как предотвратить использование ReSharper префиксов встроенных типов с символом "@" при генерации кода?

Я пишу плагин 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 ответ

Если вы хотите использовать ключевое слово "строка", вы не можете использовать кавычки для него. Используйте 'string' в шаблоне (иначе ReSharper попытается экранировать ключевое слово 'string' для использования в позиции идентификатора):

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 должен следовать стилю кода в этом случае и автоматически заменять его на "строку", когда стиль кода настроен на использование ключевых слов, но я не уверен, что он будет работать =(

Другие вопросы по тегам