2011-12-29 2 views
5

Tôi thường thấy mình viếtResharper string.Format shortcut

var message = "Hello {0}"; 

và sau đó sẽ trở lại và gõ vào

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

Nó sẽ được tốt đẹp nếu như tôi đã gõ chuỗi, khi tôi đặt "ở cuối, resharper đã tìm ra có một tham số trong chuỗi và ngay lập tức bao quanh chuỗi với phương thức string.Format và đặt con trỏ tại đối số đầu tiên.

Có đơn giản hay không cách để làm điều này? Tôi đang sử dụng Resharper 6.1

+0

Thay vì nhập '{0}', chỉ cần sử dụng 'alt + enter' và chọn tùy chọn R # của' Thêm mục định dạng mới và đối số thích hợp'. –

Trả lời

16

Chỉ cần gõ nó trong dumber:

"Hello " + world 

Alt + EnterNhập, thực hiện :

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

Rõ ràng, điều này cũng hoạt động khi toàn bộ điều phức tạp hơn nhiều. Tôi biết nó sẽ tước các cuộc gọi vô ích để .ToString(), và tôi nghi ngờ nó sẽ tự động nhấc bất kỳ biểu thức định dạng, như

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

Alt + EnterNhập

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

Nếu bạn không may mắn/mã xung quanh chứa nhiều thứ kích hoạt đề xuất Resharper (?), Bạn có thể phải định vị con trỏ trên một trong các toán tử +

+2

Bạn chỉ cần gõ chuỗi '" Xin chào "' và sau đó, trong khi con trỏ vẫn nằm trong dấu ngoặc kép, hãy sử dụng R # 'Alt + Enter'>' Enter' sẽ chọn tùy chọn R # của 'Thêm mục định dạng mới và đối số thích hợp'. R # sẽ xử lý vị trí con trỏ trước và sau. –

+0

@MetroSmurf: Ah bạn có thể xác nhận đó là công cụ R # 6.x không? Tôi đã nhìn thấy các tùy chọn với chuỗi định dạng đã được cải thiện, nhưng tôi đã không thực hiện tất cả những gì nhiều chưa :) – sehe

+0

có, điều này làm việc với R # 6. Tôi tin rằng nó đã được giới thiệu trong v6 là tốt. Có lẽ là tính năng mới được sử dụng nhiều nhất mà tôi đã sử dụng với R # 6 (buồn, tôi biết) –

1

Bạn có thể gần như thực hiện việc này bằng đoạn mã Visual Studio (tức là mà không cần ReSharper).

Lưu phần sau dưới dạng tệp có phần mở rộng là .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> 

Sau đó, bạn có thể tải nó qua Công cụ | Mã Snippets Manager | Nhập.

Khi đoạn mã có sẵn, bạn có thể gõ

var message = "Hello {0}" 

nhưng bạn phải chọn chuỗi và sau đó nhấn Ctrl KCtrlS và chọn tên đoạn tới áp dụng nó. Điều này sẽ tạo ra

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

với phần value được chọn để chỉnh sửa.

Chỉnh sửa: Ngoài ra còn có Snippet Designer extension giúp làm việc với đoạn mã dễ dàng hơn.

1

Đây là một thay thế cho đoạn mã phòng thu trực quan của Matthew. Đoạn mã này yêu cầu tên biến nhưng mặc định là thông điệp là tùy chọn, điều duy nhất được yêu cầu là tên biến. HTH

Hình như:

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

như là mặc định (abc {0} là văn bản nêu bật)

<?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

Shameless plug

Tôi cũng đã cố gắng để xây dựng một cách tiếp cận để tạo ra các định dạng chuỗi dễ dàng hơn, và những gì tôi đưa ra là nối chuỗi a-la PHP:

enter image description here

Đây là một phần của một plug-in ReSharper mà bạn có thể tìm here.

2

Tôi đã kết thúc viết một phương thức mở rộng cho các chuỗi có tên FormatWith(arg0, ar1...) vì điều này. Sau đó, tôi thấy rằng thư viện Humanizer đã làm điều tương tự. Thêm gói Humanizer NuGet và bây giờ bạn sẽ có thể viết "Heres my formatted string on the {0}st try!".FormatWith(1)" với hy vọng ít nảy xung quanh. Nếu bạn có ReSharper và như vậy nó làm nổi bật các dấu vị trí phù hợp với tham số, cài đặt Humanizer Annotations R# Extension và bạn sẽ lấy lại chúng.