Resharper string.format快捷方式

时间:2011-12-29 23:28:28

标签: c# resharper

我经常发现自己写作

var message = "Hello {0}";

然后返回并输入

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

如果我在输入字符串时会很好,当我把“放在最后,resharper发现字符串中有一个参数并立即用string.Format方法包围字符串并将光标放在第一个论点。

有直接的方法吗?我正在使用Resharper 6.1

5 个答案:

答案 0 :(得分:16)

只需在dumber中输入:

 "Hello " + world

Alt + Enter 输入,完成 1

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

显然,当整个事情变得复杂得多时,这也有效。我知道它会删除对.ToString()的无用调用,我怀疑它会自动解除任何格式表达式,例如

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

Alt + Enter键 输入

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

1 如果你运气不好/周围的代码中包含许多触发Resharper建议的东西(?),那么可能必须将光标放在其中一个+运算符上

答案 1 :(得分:3)

无耻插件

我还试图制定一种方法,使字符串格式创建更容易,我想出的是字符串拼接 a-la PHP:

enter image description here

这是ReSharper插件的一部分,您可以找到here

答案 2 :(得分:2)

由于这个原因,我最终为名为FormatWith(arg0, ar1...)的字符串编写了一个扩展方法。然后我发现Humanizer库做了同样的事情。添加Humanizer NuGet包,现在您可以编写"Heres my formatted string on the {0}st try!".FormatWith(1)",希望减少弹跳。如果您有ReSharper之类的东西,它会使用参数突出显示匹配的placemarkkers,请安装Humanizer Annotations R# Extension,然后您将其取回。

答案 3 :(得分: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>

然后您可以通过工具|加载它Code Snippets Manager |导入

在代码段可用后,您可以输入

var message = "Hello {0}"

但你必须选择字符串,然后按 Ctrl K Ctrl S 并选择要应用它的代码段名称。这会产生

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

选择value部分进行编辑。

修改:还有一个Snippet Designer extension可以让您更轻松地使用代码段。

答案 4 :(得分:1)

这是Matthew视觉工作室代码片段的替代品。此代码段要求输入变量名称,但默认为message是可选的,唯一需要的是变量名称。 HTH

看起来像:

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>