2011-12-29 54 views
5

我經常發現自己寫ReSharper的的String.Format快捷

var message = "Hello {0}"; 

,然後回去和打字

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

如果我被輸入字符串,當我把這將是很好「最後,resharper發現字符串中有一個參數,並立即用string.Format方法將字符串包圍,並將光標放在第一個參數處。

是否有直接的如何做到這一點?我使用ReSharper的6.1

+0

不用鍵入'{0}',只需使用'alt + enter'並選擇'Add new format item and proper argument'的R#選項。 – 2011-12-30 02:18:28

回答

16

在笨只需鍵入:

"Hello " + world 

Alt + Enter鍵進入,做到:

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

顯然,這也適用時整件事情要複雜得多。我知道這將去除無用呼叫.ToString(),我懷疑它會自動擡起任何格式的表情,像

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

Alt + Enter鍵輸入

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

如果你不幸/周圍的代碼包含許多觸發Resharper建議(?)的事情,那麼你可能需要使用+運營商

+2

你可以直接鍵入字符串'「你好」',然後,當光標仍在引號內時,使用R#'Alt + Enter'>'Enter'來選擇Add new format item的R#選項,適當的論據'。 R#會在照顧前後的光標位置。 – 2011-12-30 02:15:56

+0

@MetroSmurf:你能確認這是R#6.x的東西嗎?我已經看到格式化字符串的選項得到了改進,但我還沒有完全運用它們:) – sehe 2011-12-30 02:21:43

+0

是的,這適用於R#6。我相信它也是在v6中引入的。可能是我用過的R#6中最常用的新功能(傷心,我知道:) – 2011-12-30 02:24:29

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}" 

,但你必須選擇字符串,然後按Ctrl鍵ķ按Ctrl小號並選擇片段名應用它。這將生成

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

value零件選擇編輯。

編輯:還有一個Snippet Designer extension,其可與片段工作更容易。

1

這是Matthew的visual studio代碼片段的替代方案。這段代碼要求輸入變量名稱,但默認爲可選的消息,唯一需要的是變量名稱。 HTH

的樣子:

var message = string.Format("abc {0}", variable); 

爲默認(農行{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> 
3

無恥插頭

我也試着制定一種方法使字符串格式創建更容易,我想到的是字符串拼接一拉PHP:

enter image description here

這是一個ReSharper的插件,你可以找到here的一部分。

2

因爲這個,我最終爲字符串FormatWith(arg0, ar1...)寫了一個擴展方法。然後我發現Humanizer庫做了同樣的事情。添加Humanizer NuGet軟件包,現在您可以編寫"Heres my formatted string on the {0}st try!".FormatWith(1)",但希望能夠少彈一下。如果您擁有ReSharper並且喜歡它可以使用參數突出顯示匹配的位置標記,請安裝Humanizer Annotations R# Extension,然後您會將它們還原。

相關問題