Code inspection: Non-accessed positional property (private accessibility)
Category: Potential Code Quality Issues
ID: NotAccessedPositionalProperty.Local
EditorConfig: resharper_not_accessed_positional_property_local_highlighting=[error|warning|suggestion|hint|none]
Language: C#, VB.NET
Requires SWA: No
tip
C# 9 record
syntax defines a bunch of members implicitly, including Equals()
/GetHashCode()
/ToString()
implementations, properties corresponding to primary constructor parameters, and the Deconstruct()
method.
Taking into account all these implicit definitions, ReSharper reports positional properties of records that are never accessed.
Suboptimal code
class Test{ record Person( string Name, int Age, // non-accessed positional property object Tag ); public void PrintName() { var (name, _, tag) = GetPerson(); Console.WriteLine(name); } private Person GetPerson() => new("Alex", 32, null);}
After the quick-fix
class Test{ record Person( string Name, object Tag ); public void PrintName() { var (name, tag) = GetPerson(); Console.WriteLine(name); } private Person GetPerson() => new("Alex", null);}
To make removal of redundant positional members safe, the Remove unused property quick-fix (AltEnter) invokes the Safe Delete refactoring to support all record usage patterns. In the example above, ReSharper recognizes indirect usages in all C# deconstruction forms and is able to remove the corresponding _
from such deconstructions.