2014-06-24 2 views
-3
var s1=new Student{ id=1,name="Sachin" } 
var s2=new Student{ id=1,name="Sachin" } 

문제는 s1false 될 것 s2 다음 대답 동일한 경우입니다 아래의 경우에 동일한 변수를 만들기 위해, 그러나 s2 동일 s1을 할 수있는 방법은 무엇인가?발견 솔루션은

+1

[Equals() 및 Operator ==] 오버로드 지침 (http://msdn.microsoft.com/en-gb/library/ms173147(v=80) .aspx) – dcastro

답변

2

당신은 그렇지 않으면 참조 만이 비교, EqualsGetHashCode를 오버라이드 (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()

0

귀하의 ID 필드가 모든 사용자들 사이에서 고유하다고 가정하면 평등 검사로 사용하지 않으시겠습니까?

if (s1.id == s2.id) { 
    ... 
} 

그것은 complicated way 더으로 살펴보기 전에 간단한 솔루션으로 시작하는 것이 좋습니다, 당신은 당신이 필요로하는 모든입니다 찾을 수 있습니다.