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