【问题标题】:Resharper string.format shortcutResharper string.format 快捷方式
【发布时间】:2015-12-21 23:41:11
【问题描述】:

我经常发现自己在写作

var message = "Hello {0}";

然后返回并输入

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

如果在我输入字符串时,当我将 " 放在末尾时,resharper 发现字符串中有一个参数并立即用 string.Format 方法包围字符串并将光标放在第一个参数。

有没有一种简单的方法可以做到这一点?我正在使用 Resharper 6.1

【问题讨论】:

  • 不用输入{0},只需使用alt+enter并选择Add new format item and proper argument的R#选项。

标签: c# resharper


【解决方案1】:

只需输入更笨的:

 "Hello " + world

Alt+EnterEnter,完成1

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

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

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

Alt+EnterEnter

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

1如果你不走运/周围的代码包含许多触发 Resharper 建议的东西(?)你可能必须将光标放在+ 运算符之一上 em>

【讨论】:

  • 您可以只输入字符串"Hello ",然后,当光标仍在引号内时,使用 R# Alt+Enter > Enter 这将选择 Add new format item and proper argument 的 R# 选项. R# 会处理前后光标的位置。
  • @MetroSmurf:啊,你能确认那是 R# 6.x 的东西吗?我已经看到格式字符串的选项得到了改进,但我还没有太多地练习它们:)
  • 是的,这适用于 R#6。我相信它也是在 v6 中引入的。可能是我在 R#6 中使用过的最常用的新功能(可悲,我知道 :)
  • @MetroSmurf:在我看来,调用者图和值来源检查 FTW。感谢您的补充!
【解决方案2】:

无耻的塞

我还尝试制定一种方法来简化字符串格式的创建,我想出的是 字符串拼接 a-la PHP:

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

【讨论】:

    【解决方案3】:

    因此,我最终为名为@9​​87654323@ 的字符串编写了一个扩展方法。然后我发现Humanizer 库做了同样的事情。添加 Humanizer NuGet 包,现在您将能够编写 "Heres my formatted string on the {0}st try!".FormatWith(1)" 并希望减少弹跳。如果您有 ReSharper 并且喜欢它使用参数突出显示匹配的地标,请安装 Humanizer Annotations R# Extension,然后您会找回它们。

    【讨论】:

      【解决方案4】:

      您可以几乎使用 Visual Studio sn-p(即不使用 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>
      

      然后你可以通过Tools | 加载它。代码片段管理器 |导入

      一旦 sn-p 可用,您就可以输入

      var message = "Hello {0}"
      

      但您必须选择字符串,然后按 CtrlK CtrlS 并选择sn -p 名称来应用它。这会产生

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

      value 部分被选中进行编辑。

      编辑:还有一个Snippet Designer extension 可以更轻松地使用sn-ps。

      【讨论】:

        【解决方案5】:

        这是 Matthew 的 Visual Studio 代码 sn-p 的替代方案。这个 sn-p 要求输入变量名,但默认为可选的消息,唯一需要的是变量名。高温

        看起来像:

        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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多