public override object Clone() { var result = base.Clone() as PaymentIn; result.PaymentMethod = PaymentMethod?.Clone() as PaymentMethod; result.BillingAddress = BillingAddress?.Clone() as Address; result.ProcessPaymentResult = ProcessPaymentResult?.Clone() as ProcessPaymentRequestResult; result.Transactions = Transactions?.Select(x => x.Clone()).OfType <PaymentGatewayTransaction>().ToList(); result.Discounts = Discounts?.Select(x => x.Clone()).OfType <Discount>().ToList(); result.TaxDetails = TaxDetails?.Select(x => x.Clone()).OfType <TaxDetail>().ToList(); return(result); }