/// <summary> /// オブジェクトの妥当性を検証します。 /// </summary> public bool Validate() { if (BWType == BWType.None) { return(false); } if (SpecialMoveType != SpecialMoveType.None) { // 特に確認は行いません。 } else if (ActionType == ActionType.Drop) { // 駒打ちの場合 if (DstSquare == null || !DstSquare.Validate()) { return(false); } if (SrcSquare != null) { return(false); } if (MovePiece != null) { return(false); } if (IsPromote) { return(false); } } else { // 駒打ちでない場合 if (DstSquare == null || !DstSquare.Validate()) { return(false); } if (SrcSquare == null || !SrcSquare.Validate()) { return(false); } if (MovePiece == null) { return(false); } } return(true); }
/// <summary> /// ハッシュ値を計算します。 /// </summary> public override int GetHashCode() { return( BWType.GetHashCode() ^ (DstSquare != null ? DstSquare.GetHashCode() : 0) ^ (SrcSquare != null ? SrcSquare.GetHashCode() : 0) ^ (MovePiece != null ? MovePiece.GetHashCode() : 0) ^ DropPieceType.GetHashCode() ^ IsPromote.GetHashCode() ^ SpecialMoveType.GetHashCode()); }