如何防止 ReSharper 在生成代码时为内置类型添加“@”符号?
Posted
技术标签:
【中文标题】如何防止 ReSharper 在生成代码时为内置类型添加“@”符号?【英文标题】:How do I prevent ReSharper from prefixing built in types with an '@' symbol when generating code? 【发布时间】:2015-09-09 16:22:04 【问题描述】:我正在编写一个 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】:如果您想使用关键字“字符串”,则不能使用引号。在模式中使用“字符串”(否则 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 应该遵循代码样式,并在代码样式设置为使用关键字时自动将其替换为“字符串”,但我不确定它是否会起作用 =(
【讨论】:
谢谢。我没有对“字符串”进行硬编码,而是从导航代码树的IPredefinedTypeUsage
中获取。基本上我有一个插件,如果在实例上未定义方法,我想创建一个扩展方法,并且我想根据代码中的用法来锻炼该方法应该采用的返回类型,此时我没有我不认为有IDeclaredType
。以上是关于如何防止 ReSharper 在生成代码时为内置类型添加“@”符号?的主要内容,如果未能解决你的问题,请参考以下文章
防止 Resharper StyleCop 代码清理创建区域
如何防止 ReSharper 在我的 MSpec 字段之间插入空行?
如何防止 Resharper Javascript Intellisense 将 'function' 替换为 'Function'?