代码检查:未访问的位置属性(非私有可访问性)
C# 9 记录 语法隐式定义了一组成员,包括 Equals() 方法/GetHashCode() 方法/ToString() 方法 实现、与主构造函数参数对应的属性以及 Deconstruct() 方法 方法。
考虑到所有这些隐式定义,ReSharper 报告从未访问过的记录的位置属性。
record Person(
string Name,
int Age, // non-accessed positional property
object Tag
);
class SomeClass
{
public void PrintName()
{
var (name, _, tag) = GetPerson();
Console.WriteLine(name);
}
public Person GetPerson() => new("Alex", 32, null);
}
record Person(
string Name,
object Tag
);
class SomeClass
{
public void PrintName()
{
var (name, tag) = GetPerson();
Console.WriteLine(name);
}
public Person GetPerson() => new("Alex", null);
}
为了安全地移除冗余的位置成员, 移除未使用的属性 快速修复(Alt+Enter )调用 安全删除重构 以支持所有记录使用模式。 在上述示例中,ReSharper 能够识别所有 C# 解构形式中的间接使用,并能够从这些解构中移除相应的 _。
要使解决方案范围的检查生效,您需要启用以下至少一项:
简化的全局使用检查:在 ReSharper 选项 Alt+R, O 的 页面上选择 当解决方案范围分析关闭时,显示未使用的非私有类型成员。
解决方案范围分析 :在 ReSharper 选项 的 页面上选择 启用解决方案级分析(_A) Alt+R, O 。
请注意,即使报告的位置成员在您的解决方案中没有直接使用,也可能存在间接使用的情况——例如,通过反射——或者它可能只是被设计为公共 API。 在所有这些情况下,您可能希望通过以下方式之一 抑制位置成员的使用检查:
推荐的方法是为隐式使用的位置成员添加 代码注解属性。 为此有两个属性: [UsedImplicitly] 和 [PublicAPI] ,它们在功能上相似,但可以让您和您的团队了解位置成员的实际使用方式。
您还可以使用任何自定义属性抑制使用检查。 为此,请使用 [MeansImplicitUse]属性标记该属性的定义。
最后,您可以像对待任何其他代码检查一样,通过 抑制注释或抑制属性来抑制特定的使用检查。
最后修改日期: 2025年 9月 27日