Starting from C# 6.0, you can define get-only auto-properties, which (similarly to readonly fields) can be only initialized via a constructor or an initializer. ReSharper detects and helps you remove the redundant set accessor on auto-properties that are initialized from the constructor/initializer and have no write usages.
note
This inspection suggests that you use a C# 6.0 feature.
By default, ReSharper automatically detects C# version based on the associated compiler. However, you can specify the target C# version explicitly for a project — right-click the project in the Solution Explorer, choose Edit project item properties from the context menu and use the C# Language Level selector .
To set the C# version for all projects in your solution, specify it in a Directory.Build.props file in your solution directory as described here.
In the example below, an immutable class is intended, and once the value for the Name property is checked for nullability in the constructor, it can be safely used without further null checks. However, the private setter does not guarantee that the property will not be changed later in private members. Therefore, it is a good idea to make this property get-only to prevent any modifications.
tip
Reverse transformation is available with a context actionAlt+Enter.
publicclassPerson{publicstring Name {get;privateset;}// Auto-property can be made get-onlypublicPerson(string name){
Name = name ??thrownewArgumentNullException(nameof(name));}publicoverridestringToString(){return$"NAME: {Name.ToUpper()}";}}
If the solution-wide analysis is enabled, ReSharper will even analyze usages of public setters of your auto-properties and suggest to make them get-only if no such usages are found in your solution.