var s1=new Student{ id=1,name="Sachin" }
var s2=new Student{ id=1,name="Sachin" }
문제는 s1
이 false
될 것 s2
다음 대답 동일한 경우입니다 아래의 경우에 동일한 변수를 만들기 위해, 그러나 s2
동일 s1
을 할 수있는 방법은 무엇인가?발견 솔루션은
var s1=new Student{ id=1,name="Sachin" }
var s2=new Student{ id=1,name="Sachin" }
문제는 s1
이 false
될 것 s2
다음 대답 동일한 경우입니다 아래의 경우에 동일한 변수를 만들기 위해, 그러나 s2
동일 s1
을 할 수있는 방법은 무엇인가?발견 솔루션은
당신은 그렇지 않으면 참조 만이 비교, Equals
및 GetHashCode
를 오버라이드 (override) 할 필요가 :이 예에서
public class Student
{
public int Id { get; set; }
public string Name { get;set; }
public override bool Equals(object obj)
{
Student s2 = obj as Student;
if (s2 == null) return false;
return this.Equals(s2);
}
public bool Equals(Student s)
{
if (s == null) return false;
return Id == s.Id && Name == s.Name;
}
public override int GetHashCode()
{
unchecked
{
int hash = 17;
hash = hash * 23 + Id;
hash = hash * 23 + Name.GetHashCode();
return hash;
}
}
}
두 학생의 ID와 이름이 동일한 경우에만 두 경우 동일하다. 그에 맞게 변경하십시오.
Equals(Student)
을 오버로드하고 GetHashCode
을 오버라이드 할 필요는 없습니다. 그러나 강력히 권장합니다. 읽기 : Guidelines for Overloading Equals()
귀하의 ID 필드가 모든 사용자들 사이에서 고유하다고 가정하면 평등 검사로 사용하지 않으시겠습니까?
if (s1.id == s2.id) {
...
}
그것은 complicated way 더으로 살펴보기 전에 간단한 솔루션으로 시작하는 것이 좋습니다, 당신은 당신이 필요로하는 모든입니다 찾을 수 있습니다.
[Equals() 및 Operator ==] 오버로드 지침 (http://msdn.microsoft.com/en-gb/library/ms173147(v=80) .aspx) – dcastro