/// <summary> /// Gets the hash code for this object. /// </summary> /// <returns> /// The hash code for this object. /// </returns> /// <remarks> /// * CA2218: /// * If two objects are equal in value based on the Equals override, they must both return the same value for calls /// to GetHashCode. /// * GetHashCode must be overridden whenever Equals is overridden. /// * It is fine if the value overflows. /// </remarks> public override int GetHashCode() { int result = Id.GetHashCode() + ReferrerId.GetHashCode() + ReferrerType.GetHashCode() + ReferralVector.GetHashCode() + RewardRecipient.GetHashCode() + Code.GetHashCode(); foreach (ReferralEventReward referralEventReward in ReferralEventRewards) { result += referralEventReward.GetHashCode(); } return(result); }
/// <summary> /// Populate the specified ReferralType from the specified ReferralTypeDataContract. /// </summary> /// <param name="referralTypeDataContract"> /// The ReferralTypeDataContract to use to populate the ReferralType. /// </param> /// <param name="referralType"> /// The ReferralType to populate. /// </param> /// <returns> /// The result of the operation. /// </returns> /// <exception cref="ArgumentNullException"> /// * Parameter referralTypeDataContract cannot be null. /// -OR- /// * Parameter referralType cannot be null. /// </exception> protected internal ResultCode BuildReferralType(ReferralTypeDataContract referralTypeDataContract, ReferralType referralType) { if (referralTypeDataContract == null) { throw new ArgumentNullException("referralTypeDataContract", "Parameter referralTypeDataContract cannot be null."); } if (referralType == null) { throw new ArgumentNullException("referralType", "Parameter referralType cannot be null."); } ResultCode result = ResultCode.Success; ReferralVector referralVector = ReferralVector.Twitter; RewardRecipient rewardRecipient = RewardRecipient.Referrer; ReferralEvent referralEvent = ReferralEvent.Signup; bool stepResult = true; stepResult = Enum.TryParse <ReferralVector>(referralTypeDataContract.ReferralVector, true, out referralVector); if (stepResult == true) { referralType.ReferralVector = referralVector; stepResult = Enum.TryParse <RewardRecipient>(referralTypeDataContract.RewardRecipient, true, out rewardRecipient); } if (stepResult == true) { referralType.RewardRecipient = rewardRecipient; stepResult = referralTypeDataContract.ReferralEventRewards != null; } if (stepResult == true) { Dictionary <ReferralEvent, bool> registeredEvents = new Dictionary <ReferralEvent, bool>(); foreach (ReferralEventRewardDataContract referralEventRewardDataContract in referralTypeDataContract.ReferralEventRewards) { ReferralEventReward referralEventReward = new ReferralEventReward(); stepResult = Enum.TryParse <ReferralEvent>(referralEventRewardDataContract.ReferralEvent, true, out referralEvent); if (stepResult == true) { if (registeredEvents.ContainsKey(referralEvent) == false) { registeredEvents[referralEvent] = true; } else { stepResult = false; } } if (stepResult == true) { referralEventReward.ReferralEvent = referralEvent; stepResult = referralEventRewardDataContract.RewardId != Guid.Empty; } if (stepResult == true) { referralEventReward.RewardId = referralEventRewardDataContract.RewardId; stepResult = referralEventRewardDataContract.PerUserLimit >= 0; } if (stepResult == true) { referralEventReward.PerUserLimit = referralEventRewardDataContract.PerUserLimit; referralType.ReferralEventRewards.Add(referralEventReward); } else { break; } } } if (stepResult == true) { stepResult = referralType.ReferralEventRewards.Count > 0; } if (stepResult == true) { Context[Key.ReferralType] = referralType; ReferralType = referralType; } else { result = ResultCode.InvalidParameter; } return(result); }