正确的方法来重写Equals()和GetHashCode()

正确的方法来重写Equals()和GetHashCode()

我之前从未真正这样做过,所以我希望有人可以告诉我正确实现我的类的Except()和GetHashCode()的重写。

我正在尝试修改类,以便我可以使用LINQ Except()方法。

public class RecommendationDTO{public Guid RecommendationId { get; set; }public Guid ProfileId { get; set; }public Guid ReferenceId { get; set; }public int TypeId { get; set; }public IList<TagDTO> Tags { get; set; }public DateTime CreatedOn { get; set; }public DateTime? ModifiedOn { get; set; }public bool IsActive { get; set; }public object ReferencedObject { get; set; }public bool IsSystemRecommendation { get; set; }public int VisibilityScore { get; set; }public RecommendationDTO(){}public RecommendationDTO(Guid recommendationid,
                            Guid profileid,
                            Guid referenceid,
                            int typeid,
                            IList<TagDTO> tags,
                            DateTime createdon,
                            DateTime modifiedon, 
                            bool isactive,
                            object referencedobject){
    RecommendationId = recommendationid;
    ProfileId = profileid;
    ReferenceId = referenceid;
    TypeId = typeid;
    Tags = tags;
    CreatedOn = createdon;
    ModifiedOn = modifiedon;
    ReferencedObject = referencedobject;
    IsActive = isactive;}public override bool Equals(System.Object obj){
    // If parameter is null return false.
    if (obj == null)
    {
        return false;
    }

    // If parameter cannot be cast to Point return false.
    RecommendationDTO p = obj as RecommendationDTO;
    if ((System.Object)p == null)
    {
        return false;
    }

    // Return true if the fields match:
    return (ReferenceId == p.ReferenceId);// && (y == p.y);}public bool Equals(RecommendationDTO p){
    // If parameter is null return false:
    if ((object)p == null)
    {
        return false;
    }

    // Return true if the fields match:

我希望有人可以在我自己的例子中向我展示。

任何帮助,将不胜感激。

谢谢


婷婷同学_
浏览 584回答 3
3回答

暮色呼如

您可以在类上覆盖Equals()和GetHashCode(),如下所示:public&nbsp;override&nbsp;bool&nbsp;Equals(object&nbsp;obj){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;item&nbsp;=&nbsp;obj&nbsp;as&nbsp;RecommendationDTO; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(item&nbsp;==&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.RecommendationId.Equals(item.RecommendationId);}public&nbsp;override&nbsp;int&nbsp;GetHashCode(){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.RecommendationId.GetHashCode();}

肥皂起泡泡

public&nbsp;override&nbsp;bool&nbsp;Equals(System.Object&nbsp;obj){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Check&nbsp;if&nbsp;the&nbsp;object&nbsp;is&nbsp;a&nbsp;RecommendationDTO. &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;initial&nbsp;null&nbsp;check&nbsp;is&nbsp;unnecessary&nbsp;as&nbsp;the&nbsp;cast&nbsp;will&nbsp;result&nbsp;in&nbsp;null &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;obj&nbsp;is&nbsp;null&nbsp;to&nbsp;start&nbsp;with. &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;recommendationDTO&nbsp;=&nbsp;obj&nbsp;as&nbsp;RecommendationDTO; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(recommendationDTO&nbsp;==&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;it&nbsp;is&nbsp;null&nbsp;then&nbsp;it&nbsp;is&nbsp;not&nbsp;equal&nbsp;to&nbsp;this&nbsp;instance. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Instances&nbsp;are&nbsp;considered&nbsp;equal&nbsp;if&nbsp;the&nbsp;ReferenceId&nbsp;matches. &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.ReferenceId&nbsp;==&nbsp;recommendationDTO.ReferenceId;}public&nbsp;override&nbsp;int&nbsp;GetHashCode(){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Returning&nbsp;the&nbsp;hashcode&nbsp;of&nbsp;the&nbsp;Guid&nbsp;used&nbsp;for&nbsp;the&nbsp;reference&nbsp;id&nbsp;will&nbsp;be&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;sufficient&nbsp;and&nbsp;would&nbsp;only&nbsp;cause&nbsp;a&nbsp;problem&nbsp;if&nbsp;RecommendationDTO&nbsp;objects &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;were&nbsp;stored&nbsp;in&nbsp;a&nbsp;non-generic&nbsp;hash&nbsp;set&nbsp;along&nbsp;side&nbsp;other&nbsp;guid&nbsp;instances &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;which&nbsp;is&nbsp;very&nbsp;unlikely! &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.ReferenceId.GetHashCode();}
打开App,查看更多内容
随时随地看视频慕课网APP