Bạn sử dụng mẫu trực tiếp ReSharper 4+ nào cho C #? [đóng cửa]


94

Bạn sử dụng mẫu ReSharper 4.0 nào cho C # ?

Hãy chia sẻ những điều này ở định dạng sau:


[Tiêu đề]

Mô tả tùy chọn

Phím tắt: phím tắt
Có sẵn trong: [Tính sẵn sàng]

// Resharper template code snippet
// comes here

Thuộc tính macro (nếu có):

  • Macro1 - Giá trị - Chỉnh sửa được
  • Macro2 - Giá trị - Chỉnh sửa được


Thay vào đó, điều này có nên ở trên programmers.SE vì nó chủ quan?
Timwi

Câu hỏi này không mang tính xây dựng và có rất nhiều thông tin trên mạng về các mẫu trực tiếp và mẫu studio trực quan. Programmingsolved.blogspot.com/2014/04/snippet-away.html
Thulani Chivandikwa

Câu trả lời:


31

Lambda đơn giản

Thật đơn giản, thật hữu ích - một chút lambda:

Phím tắt : x

Có sẵn : C # nơi cho phép biểu thức.

x => x.$END$

Macro: không có.


22

Triển khai phương pháp 'Dispose (bool)'

Triển khai Mô hình vứt bỏ của Joe Duffy

Phím tắt: vứt bỏ

Có sẵn trong: C # 2.0+ tệp nơi cho phép khai báo loại thành viên

public void Dispose()
{
    Dispose(true);
    System.GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    if (!disposed)
    {
        if (disposing)
        {
            if ($MEMBER$ != null)
            {
                $MEMBER$.Dispose();
                $MEMBER$ = null;
            }
        }

        disposed = true;
    }
}

~$CLASS$()
{
    Dispose(false);
}

private bool disposed;

Thuộc tính macro :

  • MEMBER - Biến đề xuất của System.IDisposable - Trường hợp có thể chỉnh sửa # 1
  • CLASS - Tên loại chứa

14

Tạo thiết bị kiểm tra đơn vị mới cho một số loại

Phím tắt: ntf
Khả dụng trong: Tệp C # 2.0+ nơi cho phép khai báo kiểu thành viên hoặc khai báo vùng tên

[NUnit.Framework.TestFixtureAttribute]
public sealed class $TypeToTest$Tests
{
    [NUnit.Framework.TestAttribute]
    public void $Test$()
    {
        var t = new $TypeToTest$()
        $END$
    }
}

Macro:

  • TypeToTest - không có - # 2
  • Kiểm tra - không - V

13

Kiểm tra xem một chuỗi là null hay rỗng.

Nếu bạn đang sử dụng .Net 4, bạn có thể thích sử dụng string.IsNullOrWhiteSpace ().

Phím tắt : lẻn

Có sẵn trong : C # 2.0+ nơi cho phép biểu thức.

string.IsNullOrEmpty($VAR$)

Thuộc tính macro :

  • VAR - đề xuất một biến kiểu chuỗi. Có thể chỉnh sửa = true.

11

Tạo trường hợp thử nghiệm đơn vị độc lập mới

Phím tắt: ntc
Có trong: Tệp C # 2.0+ nơi cho phép khai báo kiểu thành viên

[NUnit.Framework.TestAttribute]
public void $Test$()
{
    $END$
}

Macro:

  • Kiểm tra - không - V

10

Khai báo trình ghi log4net cho kiểu hiện tại.

Phím tắt: nhật ký

Có sẵn trong: C # 2.0+ tệp nơi cho phép khai báo loại thành viên

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof($TYPE$));

Thuộc tính macro :

  • TYPE - Tên loại chứa

Với re-sharp hơn, tại sao không sử dụng cái này? private static readonly ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); với $ CurrType $: Tên loại chứa
Henrik

Bởi vì nếu tôi thay đổi tên loại sau này, tôi cũng sẽ phải cập nhật dòng mã đó. Của tôi là năng động hơn.
Chris Brandsma

ReSharper tự động đổi tên tất cả các trường hợp của tên loại. GetType () cũng chậm hơn.
Richard Dingwall

9

Bài kiểm tra MS Test Unit

Bài kiểm tra MS Test Unit mới sử dụng cú pháp AAA và quy ước đặt tên được tìm thấy trong Art Of Unit Testing

Phím tắt: testing (hoặc tst, hoặc bất cứ thứ gì bạn muốn)
Có sẵn trong: tệp C # 2.0+ nơi cho phép khai báo kiểu thành viên

[TestMethod]
public void $MethodName$_$StateUnderTest$_$ExpectedBehavior$()
{
    // Arrange
    $END$

    // Act


    // Assert

}

Thuộc tính macro (nếu có):

  • MethodName - Tên của phương thức đang thử nghiệm
  • StateUnderTest - Trạng thái bạn đang cố gắng kiểm tra
  • Hành vi mong đợi - Điều bạn mong đợi sẽ xảy ra

8

Kiểm tra xem biến có rỗng không

Phím tắt: ifn
Có sẵn trong: tệp C # 2.0+

if (null == $var$)
{
    $END$
}

Kiểm tra nếu biến không phải là null

Phím tắt: ifnn
Có sẵn trong: tệp C # 2.0+

if (null != $var$)
{
    $END$
}

15
Việc chuyển đổi từ C ++ sang C # đã đối xử với bạn như thế nào?
Ty.

Việc suôn sẻ w / 'Execute hoàn thành thông minh' như vĩ mô với $ var $
mklein

"Điều kiện Yoda" tốt đẹp !! ... không khôn ngoan theo cách này của mã hóa là ;-))
bytedev

7

Viết tóm tắt tuân thủ StyleCop cho hàm tạo lớp

(nếu bạn cảm thấy mệt mỏi khi liên tục nhập bản tóm tắt tiêu chuẩn dài cho mọi hàm tạo để nó tuân thủ quy tắc StyleCop SA1642)

Phím tắt: csum

Có sẵn trong: C # 2.0+

Initializes a new instance of the <see cref="$classname$"/> class.$END$

Macro:

  • classname - Tên kiểu chứa - V

7

Assert.AreEqual

Mẫu đơn giản để thêm xác nhận vào bài kiểm tra đơn vị

Phím tắt : ae
Có sẵn trong : trong các tệp C # 2.0+ nơi cho phép câu lệnh

Assert.AreEqual($expected$, $actual$);$END$

Phiên bản thông thạo:

Assert.That($expected$, Is.EqualTo($actual$));$END$

7

Rất nhiều Lambdas

Tạo một biểu thức lambda với một khai báo biến khác để dễ dàng lồng vào nhau.

Phím tắt: la, lb, lc

Có sẵn trong: Tệp C # 3.0+ nơi cho phép mệnh đề biểu thức hoặc truy vấn

la được định nghĩa là:

x => x.$END$

lb được định nghĩa là:

y => y.$END$

lc được định nghĩa là:

z => z.$END$

Điều này tương tự như Sean Kearon ở trên, ngoại trừ tôi xác định nhiều mẫu trực tiếp lambda để dễ dàng lồng các lambda. " la " được sử dụng phổ biến nhất, nhưng những cái khác rất hữu ích khi xử lý các biểu thức như sau:

items.ForEach(x => x.Children.ForEach(y => Console.WriteLine(y.Name)));

sử dụng tên x, y cho các đối số lambda có được không? nếu bạn có lambdas lồng nhau hai ba cấp, có lẽ bạn không muốn ghi nhớ x, y, z nghĩa là gì ở mỗi cấp. Xét ví dụ của bạn, tôi sẽ chọn items.ForEach (item => ... và item.Children.ForEach (con => ... để cuối cùng tôi sẽ có tên con thay vì tên y. Tên tôi. Tôi không 't nghĩ rằng đặt tên cho các đối số lambdas thể được điều trị similary để cho chỉ số vòng lặp i, j, k
Ilya Ivanov

6

Chờ nó ...

Tạm dừng để người dùng nhập liệu trước khi kết thúc ứng dụng bảng điều khiển.

Phím tắt: tạm dừng

Có sẵn trong: C # 2.0+ tệp nơi cho phép câu lệnh

System.Console.WriteLine("Press <ENTER> to exit...");
System.Console.ReadLine();$END$

Tôi muốn sử dụng Console.ReadKey(true);và cho phép bất kỳ phím nào được nhấn.
MasterMastic

6

Tạo tài sản phụ thuộc

Tạo thuộc tính phụ thuộc

Phím tắt: dp
Có trong: C # 3.0, nơi cho phép khai báo thành viên

public static readonly System.Windows.DependencyProperty $PropertyName$Property =
        System.Windows.DependencyProperty.Register("$PropertyName$",
                                                   typeof ($PropertyType$),
                                                   typeof ($OwnerType$));

    public $PropertyType$ $PropertyName$
    {
        get { return ($PropertyType$) GetValue($PropertyName$Property); }
        set { SetValue($PropertyName$Property, value); }
    }

$END$

Thuộc tính macro (nếu có):

Tên thuộc tính - Không có Macro -
Loại thuộc tính số 3 - Loại dự đoán được mong đợi tại thời điểm này - Loại chủ sở hữu số 2
- Tên loại chứa - không thể chỉnh sửa xuất hiện


5

Thông báo tài sản đã thay đổi

Đây là điều yêu thích của tôi vì tôi sử dụng nó thường xuyên và nó mang lại rất nhiều hiệu quả cho tôi.

Phím tắt : npc

Có sẵn trong : C # 2.0+ nơi cho phép biểu thức.

if (value != _$LOWEREDMEMBER$)
{
  _$LOWEREDMEMBER$ = value;
  NotifyPropertyChanged("$MEMBER$");
}

Macro :

  • MEMBER - Chứa tên loại thành viên. Không thể chỉnh sửa. Lưu ý: hãy đảm bảo cái này nằm đầu tiên trong danh sách.
  • LOWEREDMEMBER - Giá trị của MEMBER với ký tự đầu tiên ở dạng chữ thường. Không thể chỉnh sửa.

Cách sử dụng : Bên trong một trình cài đặt thuộc tính như thế này:

private string _dateOfBirth;
public string DateOfBirth
{
   get { return _dateOfBirth; }
   set
   {
      npc<--tab from here
   }
}

Nó giả định rằng biến hỗ trợ của bạn bắt đầu bằng "_". Thay thế cái này bằng bất cứ thứ gì bạn sử dụng. Nó cũng giả định rằng bạn có một phương thức thay đổi thuộc tính như sau:

private void NotifyPropertyChanged(String info)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(info));
   }
}

Trong thực tế, phiên bản của cái này tôi sử dụng dựa trên lambda ('vì tôi yêu lambdas của mình!) Và tạo ra như bên dưới. Các nguyên tắc tương tự như trên.

public decimal CircuitConductorLive
{
   get { return _circuitConductorLive; }
   set { Set(x => x.CircuitConductorLive, ref _circuitConductorLive, value); }
}

Đó là khi tôi không sử dụng PostSharp cực kỳ thanh lịch và hữu ích để thực hiện toàn bộ INotifyPropertyChanged mà không cần nỗ lực .


5

Phím tắt ngoại lệ dự kiến ​​nhanh

Chỉ là một phím tắt nhanh để thêm vào thuộc tính kiểm tra đơn vị của tôi.

Phím tắt : ee

Có sẵn trong : Có trong: C # 2.0+ tệp cho phép khai báo loại thành viên

[ExpectedException(typeof($TYPE$))]

Chỉ cần một lưu ý nhanh chóng mà nó được một vài phiên bản bây giờ mà ExpectedException đã bị phản đối NUnit ủng hộ sử dụng Assert.Throws <>
Stécy

Có xin vui lòng tất cả mọi người ngừng sử dụng ExpectedExceptionAttribute, vẫn thấy các nhà phát triển sử dụng MSTest sử dụng ngày nay ngay cả điều này :-(
bytedev

5

Bản đồ thuộc tính AutoMapper

Phím tắt: fm

Có sẵn trong: C # 2.0+ tệp nơi cho phép câu lệnh

.ForMember(d => d$property$, o => o.MapFrom(s => s$src_property$))
$END$

Macro:

  • thuộc tính - lần xuất hiện có thể chỉnh sửa
  • src_property - lần xuất hiện có thể chỉnh sửa

Ghi chú:

Tôi bỏ "dấu chấm" lambda để tôi có thể đánh. ngay lập tức và nhận tài sản intellisense. Yêu cầu AutoMapper ( http://automapper.codeplex.com/ ).


4

Tạo sơ khai trường hợp thử nghiệm cho NUnit

Điều này có thể đóng vai trò như một lời nhắc nhở (về chức năng để triển khai hoặc thử nghiệm) hiển thị trong trình chạy thử nghiệm đơn vị (như bất kỳ thử nghiệm bị bỏ qua nào khác),

Phím tắt: nts
Có trong: Tệp C # 2.0+ nơi cho phép khai báo kiểu thành viên

[Test, Ignore]
public void $TestName$()
{
    throw new NotImplementedException();
}
$END$

Tôi thực hiện một biến thể đối với điều này, nhưng với Assert.Fail () rõ ràng trong nội dung: aleriel.com/blog/2010/04/07/replace-paper-with-unit-tests
Adam Lear

4

Gọi nếu được yêu cầu

Hữu ích khi phát triển các ứng dụng WinForms trong đó một phương thức có thể được gọi từ các luồng không phải UI và sau đó phương thức đó sẽ sắp xếp lệnh gọi vào chuỗi UI.

Phím tắt : inv

Có sẵn trong : Câu lệnh tệp C # 3.0+ được phép

if (InvokeRequired)
{
    Invoke((System.Action)delegate { $METHOD_NAME$($END$); });
    return;
}

Macro

  • METHOD_NAME - Chứa tên thành viên loại

Bạn thường sử dụng mẫu này làm câu lệnh đầu tiên trong một phương thức đã cho và kết quả giống như sau:

void DoSomething(Type1 arg1)
{
    if (InvokeRequired)
    {
        Invoke((Action)delegate { DoSomething(arg1); });
        return;
    }

    // Rest of method will only execute on the correct thread
    // ...
}

4

Hướng dẫn C # mới

Tạo phiên bản System.Guid mới được khởi tạo thành giá trị hướng dẫn mới được tạo

Phím tắt: csguid Có sẵn trong: trong các tệp C # 2.0+

new System.Guid("$GUID$")

Thuộc tính macro :

  • GUID - GUID mới - Sai

Các phiên bản gần đây của ReSharper hiện bao gồm phím tắt nguid theo mặc định.
Jamie Keeling

Đúng, nhưng nó chỉ tạo ra một giá trị hướng dẫn, không khởi tạo kiểu trong C #.
codekaizen

4

Phương pháp kiểm tra MSTest

Điều này hơi khập khiễng nhưng nó hữu ích. Hy vọng rằng ai đó sẽ nhận được một số tiện ích ra khỏi nó.

Phím tắt: testMethod

Có sẵn trong: C # 2.0

[TestMethod]
public void $TestName$()
{
    throw new NotImplementedException();

    //Arrange.

    //Act.

    //Assert.
}

$END$

4

Phương pháp thiết lập NUnit

Phím tắt: thiết lập
Có trong: Có trong: C # 2.0+ tệp nơi cho phép khai báo loại thành viên

[NUnit.Framework.SetUp]
public void SetUp()
{
    $END$
}

Điểm tốt. Tôi có thể nghĩ đến một số trường hợp bạn có thể muốn phân lớp thử nghiệm đồ đạc (có lẽ nếu bạn muốn viết các thử nghiệm "hợp đồng" trong đó một tập hợp các xác nhận sẽ áp dụng cho một số đối tượng), nhưng tôi nghĩ trong trường hợp phổ biến hơn nhiều, ảo là thừa. Tôi sẽ chỉnh sửa nó.
paraquat 30/09/09

Một cải tiến cho điều này ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
bytedev

4

Phương pháp NUnit Teardown

Phím tắt: teardown
Có trong: Có trong: C # 2.0+ tệp nơi cho phép khai báo kiểu thành viên

[NUnit.Framework.TearDown]
public void TearDown()
{
    $END$
}

3

Tạo kiểm tra độ tỉnh táo để đảm bảo rằng một đối số không bao giờ rỗng

Phím tắt: eann
Khả dụng trong: C # 2.0+ tệp nơi cho phép câu lệnh kiểu

Enforce.ArgumentNotNull($inner$, "$inner$");

Macro:

  • bên trong - Tham số đề xuất - # 1

Lưu ý: Mặc dù đoạn mã này nhắm mục tiêu đến thư viện .NET Lokad.Shared mã nguồn mở , nó có thể dễ dàng điều chỉnh cho phù hợp với bất kỳ loại kiểm tra đối số nào khác.


3

Lớp COM mới

Phím tắt : comclass

Có sẵn trong : Tệp C # 2.0+ nơi cho phép khai báo kiểu thành viên hoặc khai báo vùng tên

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("$GUID$")]
public class $NAME$ : $INTERFACE$
{
    $END$
}

Macro

  • GUID - GUID mới
  • NAME - Có thể chỉnh sửa
  • GIAO DIỆN - Có thể chỉnh sửa

2
Mẫu đẹp, nhưng mẫu này có thể phù hợp hơn với mẫu tệp hơn là mẫu trực tiếp.
Drew Noakes

3

Khẳng định lời mời không bắt buộc

Hữu ích khi phát triển các ứng dụng WinForms mà bạn muốn chắc chắn rằng mã đang thực thi trên đúng chuỗi cho một mục nhất định. Lưu ý rằng Controlthực hiện ISynchronizeInvoke.

Phím tắt : ani

Có sẵn trong : Câu lệnh tệp C # 2.0+ được phép

Debug.Assert(!$SYNC_INVOKE$.InvokeRequired, "InvokeRequired");

Macro

  • SYNC_INVOKE - Biến đề xuất củaSystem.ComponentModel.ISynchronizeInvoke

2

Trace - Writeline, với định dạng

Mẫu rất đơn giản để thêm dấu vết với một chuỗi được định dạng (như Debug.WriteLine đã hỗ trợ).

Phím tắt: twlf
Có trong: tệp C # 2.0+ nơi cho phép câu lệnh

Trace.WriteLine(string.Format("$MASK$",$ARGUMENT$));

Thuộc tính macro:

  • Đối số - value- EditableOccurence
  • Mặt nạ - "{0}"- EditableOccurence

1

Giả mạo bộ cách ly Typemock mới

Phím tắt : giả
Có trong : [trong các tệp c # 2.0 nơi cho phép câu lệnh]

$ TYPE $ $ Tên $ Fake = Isolate.Fake.Instance ();
Isolate.WhenCalled (() => $ Name $ Fake.)

Thuộc tính macro:
* $ TYPE $ - Đề xuất kiểu cho một biến mới
* $ Tên $ - Giá trị của một biến khác ( Kiểu ) với ký tự đầu tiên là chữ thường


1

Vì tôi đang làm việc với Unity ngay bây giờ, tôi đã nghĩ ra một số để giúp cuộc sống của tôi dễ dàng hơn một chút:


Nhập bí danh

Phím tắt : ta
Có sẵn trong : * .xml; * .config

<typeAlias alias="$ALIAS$" type="$TYPE$,$ASSEMBLY$"/>

Loại khai báo

Đây là kiểu không có tên và không có đối số

Phím tắt : tp
Có sẵn trong : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$"/>

Loại Khai báo (với tên)

Đây là kiểu có tên và không có đối số

Phím tắt : tn
Có sẵn trong : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$" name="$NAME$"/>

Khai báo kiểu với hàm tạo

Đây là kiểu có tên và không có đối số

Phím tắt : tpc
Có sẵn trong : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$">
  <typeConfig>
    <constructor>
        $PARAMS$
    </constructor>
  </typeConfig>
</type>

Vân vân....


1

Khối cấu hình XML log4net

Bạn có thể nhập trực tiếp mẫu:

<TemplatesExport family="Live Templates">
  <Template uid="49c599bb-a1ec-4def-a2ad-01de05799843" shortcut="log4" description="inserts log4net XML configuration block" text="  &lt;configSections&gt;&#xD;&#xA;    &lt;section name=&quot;log4net&quot; type=&quot;log4net.Config.Log4NetConfigurationSectionHandler,log4net&quot; /&gt;&#xD;&#xA;  &lt;/configSections&gt;&#xD;&#xA;&#xD;&#xA;  &lt;log4net debug=&quot;false&quot;&gt;&#xD;&#xA;    &lt;appender name=&quot;LogFileAppender&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;&#xD;&#xA;      &lt;param name=&quot;File&quot; value=&quot;logs\\$LogFileName$.log&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;AppendToFile&quot; value=&quot;false&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;RollingStyle&quot; value=&quot;Size&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;MaxSizeRollBackups&quot; value=&quot;5&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;MaximumFileSize&quot; value=&quot;5000KB&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;StaticLogFileName&quot; value=&quot;true&quot; /&gt;&#xD;&#xA;&#xD;&#xA;      &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;&#xD;&#xA;        &lt;param name=&quot;ConversionPattern&quot; value=&quot;%date [%3thread] %-5level %-40logger{3} - %message%newline&quot; /&gt;&#xD;&#xA;      &lt;/layout&gt;&#xD;&#xA;    &lt;/appender&gt;&#xD;&#xA;&#xD;&#xA;    &lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot;&gt;&#xD;&#xA;      &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;&#xD;&#xA;        &lt;param name=&quot;ConversionPattern&quot; value=&quot;%message%newline&quot; /&gt;&#xD;&#xA;      &lt;/layout&gt;&#xD;&#xA;    &lt;/appender&gt;&#xD;&#xA;&#xD;&#xA;    &lt;root&gt;&#xD;&#xA;      &lt;priority value=&quot;DEBUG&quot; /&gt;&#xD;&#xA;      &lt;appender-ref ref=&quot;LogFileAppender&quot; /&gt;&#xD;&#xA;    &lt;/root&gt;&#xD;&#xA;  &lt;/log4net&gt;&#xD;&#xA;" reformat="False" shortenQualifiedReferences="False">
    <Context>
      <FileNameContext mask="*.config" />
    </Context>
    <Categories />
    <Variables>
      <Variable name="LogFileName" expression="getOutputName()" initialRange="0" />
    </Variables>
    <CustomProperties />
  </Template>
</TemplatesExport>

1

Làm cho phương thức ảo

Thêm từ khóa ảo. Đặc biệt hữu ích khi sử dụng NHibernate, EF hoặc khuôn khổ tương tự trong đó các phương thức và / hoặc thuộc tính phải ảo để cho phép tải chậm hoặc ủy quyền.

Phím tắt: v

Có sẵn trong: Tệp C # 2.0+ nơi cho phép khai báo loại thành viên

virtual $END$

Bí quyết ở đây là không gian sau ảo, có thể khó nhìn thấy ở trên. Mẫu thực tế là "ảo $ END $" với mã định dạng được bật. Điều này cho phép bạn đi đến điểm chèn bên dưới (ký hiệu là |) và nhập v:

public |string Name { get; set; }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.