在GetHashCode()中引用的非只读字段

8 浏览
0 Comments

在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给了我一些建议:

  1. 在`GetHashCode()`方法中引用了非只读字段。建议出现在以下代码行中:

`return this.age.GetHashCode() * this.name.GetHashCode() * this.lname.GetHashCode();`

  1. 我们应该只为属性使用`GetHashCode`吗?
0