此代码生成适用于:
- C#(编程语言)
什么: 允许生成 Equals 和 GetHashCode 方法。
什么时候: 如果类型应由一个或多个字段进行比较,而不是由内存中的对象位置进行比较,请生成这些替代。
为什么:
如果要实现值类型,应考虑重写 Equals 方法。 这样做时,可以在 ValueType 上实现 Equals 方法的默认实现中获得更高的性能。
如果要实现引用类型,如果类型看起来像基类型(如 Point、String、BigNumber 等),则应考虑重写 Equals 方法。
重写 GetHashCode 方法,以允许类型在哈希表中正常工作。 阅读有关 相等运算符的更多指南。
操作说明
将光标放在类型声明行的某个位置。
public class ImaginaryNumber { public double RealNumber { get; set; } public double ImaginaryUnit { get; set; } }
代码应类似于以下屏幕截图:
小窍门
不要双击选择类型名称,否则菜单选项将不可用。 只需将光标放在线条上的某个位置即可。
接下来,选择以下作之一:
按 Ctrl+. 键触发 Quick Actions and Refactorings 菜单。
右键单击并选择 Quick Actions and Refactorings 菜单。
单击
。
在下拉菜单中,选择“ 生成等值” 或 “生成等于”和“GetHashCode”。
在 “选取成员 ”对话框中,选择要为其生成方法的成员:
小窍门
还可以使用对话框底部附近的复选框从此对话生成运算符。
使用
Equals
默认实现生成和GetHashCode
方法,如以下代码所示:public class ImaginaryNumber : IEquatable<ImaginaryNumber> { public double RealNumber { get; set; } public double ImaginaryUnit { get; set; } public override bool Equals(object obj) { return Equals(obj as ImaginaryNumber); } public bool Equals(ImaginaryNumber other) { return other != null && RealNumber == other.RealNumber && ImaginaryUnit == other.ImaginaryUnit; } public override int GetHashCode() { return HashCode.Combine(RealNumber, ImaginaryUnit); } }
代码应类似于以下屏幕截图: