我经常发现自己在写作
var message = "Hello {0}";
然后返回并输入
var message = string.Format("Hello {0}", world);
当我输入字符串时,如果在最后输入双引号",希望Resharper能够自动识别字符串中的参数,并立即使用string.Format方法将字符串括起来,同时将光标放在第一个参数处,这样很方便。是否有简单的方法实现这个功能?我正在使用Resharper 6.1。
直接在简单模式下输入即可:
"Hello " + world
Alt+EnterEnter, done1:
string.Format("Hello {0}", world);
显然,当整个事情变得更加复杂时,这也适用。我知道它会剥离无用的调用 .ToString()
,我猜测它会自动提取任何格式表达式,比如
int i = 42;
"i = " + i.ToString("X2");
Alt+EnterEnter
string.Format("i = {0:X2}", i);
1 如果你运气不好或者周围的代码包含许多触发Resharper建议的内容,你可能需要把光标放在其中一个+
操作符上。
"Hello "
,然后,在光标仍在引号内的情况下,使用 R# 的 Alt+Enter
> Enter
快捷键,这将选择R#的 添加新格式项和适当参数
选项。 R# 将负责处理光标的放置位置。 - Metro SmurfFormatWith(arg0, ar1...)
的字符串扩展方法。但是后来我发现Humanizer库恰好也实现了同样的功能。只需添加Humanizer NuGet软件包,您就可以使用"Heres my formatted string on the {0}st try!".FormatWith(1)"
,而不必反复搜索。如果您使用ReSharper并喜欢它突出显示参数匹配,可以安装Humanizer Annotations R# Extension,然后这些内容将得到恢复。<?xml version="1.0" encoding="utf-8"?>
<CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<Header>
<Title>string format</Title>
<Author>Matthew Strawbridge</Author>
<Description>Wraps the selected text with string.Format</Description>
<SnippetTypes>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>variable</ID>
<Default>value</Default>
</Literal>
</Declarations>
<Code Language="CSharp">
<![CDATA[string.Format($selected$, $variable$);]]>
</Code>
</Snippet>
</CodeSnippet>
然后您可以通过工具 | 代码段管理器 | 导入加载它。
一旦代码段可用,您就可以输入
var message = "Hello {0}"
但是您需要选择字符串,然后按下CtrlKCtrlS并选择片段名称以应用它。这将生成
var message = string.Format("Hello {0}", value);
选择编辑value
部分。
编辑:还有一个可以使片段工作更轻松的 Snippet Designer extension 扩展。
var message = string.Format( "abc {0}", variable );
作为默认选项(abc {0} 是突出显示的文本)
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>String Format</Title>
<Author>OmegaMan</Author>
<Description>Surrounded text gets format</Description>
<HelpUrl></HelpUrl>
<SnippetTypes />
<Keywords />
<Shortcut>#SF</Shortcut>
</Header>
<Snippet>
<References />
<Imports />
<Declarations>
<Literal Editable="true">
<ID>name</ID>
<Type></Type>
<ToolTip>What the variable name should be.</ToolTip>
<Default>message</Default>
<Function></Function>
</Literal>
<Literal Editable="true">
<ID>Vars</ID>
<Type></Type>
<ToolTip>The target variable for format.</ToolTip>
<Default>variable</Default>
<Function></Function>
</Literal>
</Declarations>
<Code Language="csharp" Kind="" Delimiter="$"><![CDATA[var $name$ = string.Format($selected$, $Vars$);$end$ ]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
{0}
,只需使用alt+enter
并选择 R# 选项中的添加新格式项和适当参数
。 - Metro Smurf