/// <summary>
        /// Return the HashCode of this object.
        /// </summary>
        /// <returns>The HashCode of this object.</returns>
        public override Int32 GetHashCode()
        {
            unchecked
            {
                return((ChargeDetailRecords.Any()
                           ? ChargeDetailRecords.GetHashCode() * 5
                           : 0) ^

                       StatusCode.GetHashCode());
            }
        }
            /// <summary>
            /// Compares two GetChargeDetailRecords responses for equality.
            /// </summary>
            /// <param name="GetChargeDetailRecordsResponse">A GetChargeDetailRecords response to compare with.</param>
            /// <returns>True if both match; False otherwise.</returns>
            public override Boolean Equals(GetChargeDetailRecordsResponse GetChargeDetailRecordsResponse)
            {
                if ((Object)GetChargeDetailRecordsResponse == null)
                {
                    return(false);
                }

                return((!ChargeDetailRecords.Any() && !GetChargeDetailRecordsResponse.ChargeDetailRecords.Any()) ||
                       (ChargeDetailRecords.Any() && GetChargeDetailRecordsResponse.ChargeDetailRecords.Any() && ChargeDetailRecords.Count().Equals(GetChargeDetailRecordsResponse.ChargeDetailRecords.Count())) &&

                       (StatusCode != null && GetChargeDetailRecordsResponse.StatusCode != null) ||
                       (StatusCode == null && GetChargeDetailRecordsResponse.StatusCode == null && StatusCode.Equals(GetChargeDetailRecordsResponse.StatusCode)));
            }
        /// <summary>
        /// Return a XML representation of this object.
        /// </summary>
        /// <param name="CustomGetChargeDetailRecordsResponseSerializer">A delegate to customize the serialization of GetChargeDetailRecords responses.</param>
        /// <param name="CustomChargeDetailRecordSerializer">A delegate to serialize custom ChargeDetailRecord XML elements.</param>
        /// <param name="CustomIdentificationSerializer">A delegate to serialize custom Identification XML elements.</param>
        public XElement ToXML(CustomXMLSerializerDelegate <GetChargeDetailRecordsResponse> CustomGetChargeDetailRecordsResponseSerializer = null,
                              CustomXMLSerializerDelegate <ChargeDetailRecord> CustomChargeDetailRecordSerializer = null,
                              CustomXMLSerializerDelegate <Identification> CustomIdentificationSerializer         = null)

        {
            var XML = new XElement(OICPNS.Authorization + "eRoamingChargeDetailRecords",

                                   ChargeDetailRecords.SafeAny()
                                  ? ChargeDetailRecords.Select(cdr => cdr.ToXML(CustomChargeDetailRecordSerializer: CustomChargeDetailRecordSerializer,
                                                                                CustomIdentificationSerializer:     CustomIdentificationSerializer))
                                  : null

                                   );


            return(CustomGetChargeDetailRecordsResponseSerializer != null
                       ? CustomGetChargeDetailRecordsResponseSerializer(this, XML)
                       : XML);
        }
        /// <summary>
        /// Return a text-representation of this object.
        /// </summary>
        public override String ToString()

        => String.Concat(ChargeDetailRecords.Count() + " charge detail record(s)",
                         StatusCode.HasValue
                                 ? " -> " + StatusCode.Value.Code
                                 : "");