ReSharper 2024.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, ReSharper 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, ReSharper recognizes indirect usages in all C# deconstruction forms and is able to remove the corresponding _ from such deconstructions.

Last modified: 08 April 2024