生成关系成员
ReSharper 帮助您使用选定的字段和属性自动重载关系运算符和相关接口的实现。 默认情况下,ReSharper 将创建 IComparable<T> 的实现,并可选地生成运算符 >、 <、 ≥ 和 ≤ 以及 IComparable 的实现。
在下面的示例中,此命令用于生成关系成员,这些成员在比较 Person 类的对象时会考虑 int _birthYear 和 string _name 字段。
生成前 | 生成后 |
|---|---|
class Person
{
private int _birthYear;
private string _name;
}
|
class Person : IComparable<Person>, IComparable
{
private int _birthYear;
private string _name;
public int CompareTo(Person other)
{
if (ReferenceEquals(this, other)) return 0;
if (ReferenceEquals(null, other)) return 1;
var birthYearComparison = _birthYear.CompareTo(other._birthYear);
if (birthYearComparison != 0) return birthYearComparison;
return string.Compare(_name, other._name, StringComparison.Ordinal);
}
// Optionally: Implementation of IComparable and relational operators
public int CompareTo(object obj)
{
if (ReferenceEquals(null, obj)) return 1;
if (ReferenceEquals(this, obj)) return 0;
if (!(obj is Person))
throw new ArgumentException($"Object must be of type {nameof(Person)}");
return CompareTo((Person) obj);
}
public static bool operator <(Person left, Person right)
{
return Comparer<Person>.Default.Compare(left, right) < 0;
}
public static bool operator >(Person left, Person right)
{
return Comparer<Person>.Default.Compare(left, right) > 0;
}
public static bool operator <=(Person left, Person right)
{
return Comparer<Person>.Default.Compare(left, right) <= 0;
}
public static bool operator >=(Person left, Person right)
{
return Comparer<Person>.Default.Compare(left, right) >= 0;
}
}
|
生成关系成员
在编辑器中,将插入符号放置在类型名称处或类型内您希望插入关系成员的行上。 如果插入符号位于类型名称上,生成的代码将添加到类型声明的开头。
按 Alt+Insert 或从主菜单中选择 。 或者,您可以按 Control+Shift+A ,在弹出窗口中开始输入命令名称,然后在那里选择它。
在 生成 弹出窗口中,选择 关系成员。
在出现的 生成 对话框中,您将看到属性和字段的列表。 选择您要用于类型比较的成员。

如果您的类型中没有字段/属性,或者您未选择任何字段/属性,根据设置,ReSharper 将抛出新的
NotImplementedException(),返回默认值,或在生成的方法体中放置无法编译的代码。 您可以在 ReSharper 选项的 页面上配置设置。可选地,在对话框中使用以下控件:
字段可以为 null — 如果您的类型中有任何可为空的字段或属性,则会显示。 默认情况下,此复选框是选中的,这意味着 ReSharper 将为选定的字段生成空值检查。 如果您不需要空值检查,可以取消选中此复选框。
字符串比较 — 如果您的类型中有任何字符串字段,将会出现。 ReSharper 将为选定的字符串生成
string.Compare(string,string,StringComparison),并且选择器可让您选择为 StringComparison 参数生成的值。CompareTo 已经存在 — 如果
CompareTo()的实现已存在,则会显示,并允许您选择是否:替换已存在的方法。
将新生成的方法与现有方法并排放置。
完全跳过生成新方法。
实现 IComparable 接口 — 勾选此复选框以生成
IComparable接口的实现,除了IComparable<T>,还会生成CompareTo(object)方法以及CompareTo(T)。
单击 完成 完成向导。
您还可以单击 选项 ,在 ReSharper 选项的 页面上查看或修改通用代码生成首选项。
此功能在以下语言和技术中 受支持:
此处提供的说明和示例针对在 C# 中使用该功能。 有关其他语言的更多信息,请参阅 语言和框架 部分中的相应主题。