在GetHashCode()中引用的非只读字段
在GetHashCode()中引用的非只读字段
开始时,我重写了概念并覆盖了方法`Equals`和`GetHashCode`。
首先,我用这段“非常简单的代码”开始:
internal class Person { public string name; public int age; public string lname; public Person(string name, int age, string lname) { this.name = name; this.age = age; this.lname = lname; } public override bool Equals(object obj) { var person = obj as Person; if (person != null) { return person.age == this.age && person.name == this.name && person.lname == this.lname; } return false; } public override int GetHashCode() { return this.age.GetHashCode() * this.name.GetHashCode() * this.lname.GetHashCode(); } }
尽管这很好用,但我的“共同开发者”Mr.Resharper给了我一些建议:
- 在`GetHashCode()`方法中引用了非只读字段。建议出现在以下代码行中:
`return this.age.GetHashCode() * this.name.GetHashCode() * this.lname.GetHashCode();`
- 我们应该只为属性使用`GetHashCode`吗?