Resharper字符串格式化快捷方式

5

我经常发现自己在写作

var message = "Hello {0}";

然后返回并输入

var message = string.Format("Hello {0}", world);

当我输入字符串时,如果在最后输入双引号",希望Resharper能够自动识别字符串中的参数,并立即使用string.Format方法将字符串括起来,同时将光标放在第一个参数处,这样很方便。是否有简单的方法实现这个功能?我正在使用Resharper 6.1。


不要打 {0},只需使用 alt+enter 并选择 R# 选项中的 添加新格式项和适当参数 - Metro Smurf
5个回答

16

直接在简单模式下输入即可:

 "Hello " + world

Alt+EnterEnter, done1:


(翻译:按下Alt+Enter,再按下Enter,完成1:)
 string.Format("Hello {0}", world);

显然,当整个事情变得更加复杂时,这也适用。我知道它会剥离无用的调用 .ToString(),我猜测它会自动提取任何格式表达式,比如

 int i = 42;
 "i = " + i.ToString("X2"); 

Alt+EnterEnter

 string.Format("i = {0:X2}", i);

1 如果你运气不好或者周围的代码包含许多触发Resharper建议的内容,你可能需要把光标放在其中一个+操作符上。


2
你可以直接输入字符串 "Hello ",然后,在光标仍在引号内的情况下,使用 R# 的 Alt+Enter > Enter 快捷键,这将选择R#的 添加新格式项和适当参数 选项。 R# 将负责处理光标的放置位置。 - Metro Smurf
@MetroSmurf:啊,你能确认这是R#6.x的东西吗?我看到格式字符串选项已经得到改进,但我还没有完全使用它们 :) - sehe
是的,这个可以在R#6中使用。我相信它也是在v6中引入的。可能是我在R#6中使用最多的新功能(很遗憾,我知道 :))。 - Metro Smurf
@MetroSmurf:在我看来,调用者图和值来源检查非常棒。感谢您的添加! - sehe

3

卖个关子

我也试图制定一种更容易创建字符串格式的方法,我想到的是 PHP 风格的 字符串拼接

enter image description here

这是 ReSharper 插件的一部分,你可以在这里找到它。


2
因此,我最终写了一个名为FormatWith(arg0, ar1...)的字符串扩展方法。但是后来我发现Humanizer库恰好也实现了同样的功能。只需添加Humanizer NuGet软件包,您就可以使用"Heres my formatted string on the {0}st try!".FormatWith(1)",而不必反复搜索。如果您使用ReSharper并喜欢它突出显示参数匹配,可以安装Humanizer Annotations R# Extension,然后这些内容将得到恢复。

1
你可以使用Visual Studio的代码片段(即不需要ReSharper)几乎可以做到这一点。
将以下内容保存为一个以.snippet扩展名的文件。
<?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 扩展。


1
这是一个替代Matthew的Visual Studio代码片段。此片段会要求输入变量名,但默认为可选的“message”,唯一必需的是变量名。希望对你有所帮助。
效果如下:
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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接