JetBrains Rider 2021.3 Help

Code Inspection: Non-accessed positional property (private accessibility)

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, JetBrains Rider reports positional properties of records that are never accessed.

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); }
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 (Alt+Enter) invokes the Safe Delete refactoring to support all record usage patterns. In the example above, JetBrains Rider recognizes indirect usages in all C# deconstruction forms and is able to remove the corresponding _ from such deconstructions.

Last modified: 04 January 2022