ReSharper 2025.3 Help

生成关系比较器

ReSharper 帮助您基于 Comparer<T> 使用选定的字段和属性创建一个嵌套的比较器类。 除了选择字符串比较算法和生成空值检查之外,您还可以选择生成一个静态属性,从而将比较器类暴露给使用者。

在下面的示例中,使用此命令生成一个关系比较器,该比较器在比较 Person 类的对象时会考虑 int _birthYearstring _name 字段。

生成前

生成后

class Person { private int _birthYear; private string _name; }
class Person { private int _birthYear; private string _name; private sealed class BirthYearNameRelationalComparer : Comparer<Person> { public override int Compare(Person x, Person y) { if (ReferenceEquals(x, y)) return 0; if (ReferenceEquals(null, y)) return 1; if (ReferenceEquals(null, x)) return -1; var birthYearComparison = x._birthYear.CompareTo(y._birthYear); if (birthYearComparison != 0) return birthYearComparison; return string.Compare(x._name, y._name, StringComparison.Ordinal); } } public static Comparer<Person> BirthYearNameComparer { get; } = new BirthYearNameRelationalComparer(); }

生成一个关系比较器类

  1. 在编辑器中,将插入点放置在类型名称处,或类型内您想插入关系比较器类的行上。 如果插入点位于类型名称处,则生成的代码将添加到类型声明的开头。

  2. Alt+Insert 或从主菜单中选择 ReSharper | 编辑| 生成代码…。 或者,您可以按 Control+Shift+A ,开始在弹窗中输入命令名称,然后从中选择它。

  3. 生成 弹出窗口中,选择 关系比较器

  4. 在出现的 生成 对话框中,您将看到属性和字段的列表。 选择您希望用于类型比较的成员。

    使用 ReSharper 生成关系比较器类

    如果您的类型中没有字段/属性,或者您未选择其中任何一个,ReSharper 将根据您的设置抛出新的 NotImplementedException() ,返回默认值,或在生成方法的主体中放置无法编译的代码。 您可以在 ReSharper 选项的 代码编辑 | 成员生成 页面上配置设置。

    可选地,在对话框中使用以下控件:

    • 字段可以为 null — 如果您的类型中有任何可为空的字段或属性,则会显示。 默认情况下,此复选框已选中,这意味着 ReSharper 将为选定的字段生成空值检查。 如果您不需要空值检查,可以清除此复选框。

    • 字符串比较 — 如果您的类型中有任何字符串字段,则会显示。 ReSharper 将为选定的字符串生成 string.Compare(string, string, StringComparison) ,并且选择器允许您选择应为 StringComparison 参数生成的值。

    • 通过静态属性公开 — 使比较器类为私有,并生成一个静态属性以向使用者公开比较器类。

    • 比较器名称前缀 — 允许您指定将在生成的比较器类名称中使用的前缀。

  5. 单击 完成 以完成向导。

    您还可以单击 选项 在 ReSharper 选项的 代码编辑 | 成员生成 页面上查看或修改通用代码生成偏好。

此功能在以下语言和技术中是 支持的

语言:C#

语言:VB.NET

语言:C++

语言:ASP.NET

语言:Razor

语言:XAML

语言:Resx

语言:构建脚本

语言:SQL

功能在 C# 中可用

此功能适用于 Visual Basic

功能在 C++ 中不可用

功能在 ASP.NET 中不可用

功能在 Razor 中不可用

功能在 XAML 中不可用

此功能不适用于资源文件

此功能不适用于构建脚本文件

功能在 SQL/NoSQL 文件和注入中不可用

此处提供的说明和示例介绍了在 C# 中使用该功能。 有关其他语言的更多信息,请参阅 语言和框架 部分中的相关主题。

最后修改日期: 2025年 12月 8日