//-------------------------------------------------------------------------
        public ImmutableRatesProvider generate(DoubleArray parameters, IDictionary <CurveName, JacobianCalibrationMatrix> jacobians, IDictionary <CurveName, DoubleArray> sensitivitiesMarketQuote)
        {
            // collect curves for child provider based on existing provider
            IDictionary <Currency, Curve> discountCurves = new Dictionary <Currency, Curve>();
            IDictionary <Index, Curve>    indexCurves    = new Dictionary <Index, Curve>();

//JAVA TO C# CONVERTER TODO TASK: There is no .NET Dictionary equivalent to the Java 'putAll' method:
            discountCurves.putAll(knownProvider.DiscountCurves);
//JAVA TO C# CONVERTER TODO TASK: There is no .NET Dictionary equivalent to the Java 'putAll' method:
            indexCurves.putAll(knownProvider.IndexCurves);

            // generate curves from combined parameter array
            int startIndex = 0;

            for (int i = 0; i < curveDefinitions.size(); i++)
            {
                CurveDefinition curveDefn = curveDefinitions.get(i);
                CurveMetadata   metadata  = curveMetadata.get(i);
                CurveName       name      = curveDefn.Name;
                // extract parameters for the child curve
                int         paramCount  = curveDefn.ParameterCount;
                DoubleArray curveParams = parameters.subArray(startIndex, startIndex + paramCount);
                startIndex += paramCount;
                // create the child curve
                CurveMetadata childMetadata = this.childMetadata(metadata, curveDefn, jacobians, sensitivitiesMarketQuote);
                Curve         curve         = curveDefn.curve(knownProvider.ValuationDate, childMetadata, curveParams);
                // put child curve into maps
                ISet <Currency> currencies = discountCurveNames.get(name);
                foreach (Currency currency in currencies)
                {
                    discountCurves[currency] = curve;
                }
                ISet <Index> indices = forwardCurveNames.get(name);
                foreach (Index index in indices)
                {
                    indexCurves[index] = curve;
                }
            }
            return(knownProvider.toBuilder().discountCurves(discountCurves).indexCurves(indexCurves).build());
        }