ReSharper 2024.1 Help

Code Inspection: Auto-property can be made get-only (private accessibility)

Category

Common Practices and Code Improvements

ID

AutoPropertyCanBeMadeGetOnly.Local

EditorConfig

resharper_auto_property_can_be_made_get_only_local_highlighting

Default severity

Suggestion

Language

C#, VB.NET

Requires SWA

No

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.

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.

public class Person { public string Name { get; private set; } // Auto-property can be made get-only public Person(string name) { Name = name ?? throw new ArgumentNullException(nameof(name)); } public override string ToString() { 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.

Last modified: 15 April 2024