public ParameterTranslationsImpl(IEnumerable <IParameterSpecification> parameterSpecifications)
        {
            List <ParameterInfo> ordinalParameterList = new List <ParameterInfo>();
            NullableDictionary <string, NamedParamTempHolder> namedParameterMap = new NullableDictionary <string, NamedParamTempHolder>();

            int i = 0;

            foreach (IParameterSpecification spec in parameterSpecifications)
            {
                if (spec is PositionalParameterSpecification)
                {
                    PositionalParameterSpecification ordinalSpec = ( PositionalParameterSpecification )spec;
                    ordinalParameterList.Add(new ParameterInfo(i, ordinalSpec.ExpectedType));
                }
                else if (spec is NamedParameterSpecification)
                {
                    NamedParameterSpecification namedSpec   = ( NamedParameterSpecification )spec;
                    NamedParamTempHolder        paramHolder = namedParameterMap[namedSpec.Name];
                    if (paramHolder == null)
                    {
                        paramHolder      = new NamedParamTempHolder();
                        paramHolder.name = namedSpec.Name;
                        paramHolder.type = namedSpec.ExpectedType;
                        namedParameterMap.Add(namedSpec.Name, paramHolder);
                    }
                    paramHolder.positions.Add(i);
                }
                else
                {
                    // don't care about other param types here, just those explicitly user-defined...

                    // Steve Strong Note:  The original Java does not do this decrement; it increments i for
                    // every parameter type.  However, within the Loader.GetParameterTypes() method, this introduces
                    // nulls into the paramTypeList array, which in turn causes Loader.ConvertITypesToSqlTypes() to crash
                    // with a null dereference.  An alternative fix is to change the Loader to handle the null.  I'm
                    // not sure which fix is the most appropriate.
                    // Legacy.FumTest.CompositeIDQuery() shows the bug if you remove the decrement below...
                    i--;
                }

                i++;
            }

            _ordinalParameters = ordinalParameterList.ToArray();
            _namedParameters   = new Dictionary <string, ParameterInfo>();

            foreach (NamedParamTempHolder holder in namedParameterMap.Values)
            {
                _namedParameters.Add(holder.name, new ParameterInfo(ArrayHelper.ToIntArray(holder.positions), holder.type));
            }
        }
		public ParameterTranslationsImpl(IEnumerable<IParameterSpecification> parameterSpecifications)
		{
			List<ParameterInfo> ordinalParameterList = new List<ParameterInfo>();
			NullableDictionary<string, NamedParamTempHolder> namedParameterMap = new NullableDictionary<string, NamedParamTempHolder>();

			int i = 0;
			foreach (IParameterSpecification spec in parameterSpecifications)
			{
				if ( spec is PositionalParameterSpecification) 
				{
					PositionalParameterSpecification ordinalSpec = ( PositionalParameterSpecification ) spec;
					ordinalParameterList.Add( new ParameterInfo( i, ordinalSpec.ExpectedType) );
				}
				else if ( spec is NamedParameterSpecification ) 
				{
					NamedParameterSpecification namedSpec = ( NamedParameterSpecification ) spec;
					NamedParamTempHolder paramHolder = namedParameterMap[namedSpec.Name];
					if ( paramHolder == null ) {
						paramHolder = new NamedParamTempHolder();
						paramHolder.name = namedSpec.Name;
						paramHolder.type = namedSpec.ExpectedType;
						namedParameterMap.Add( namedSpec.Name, paramHolder );
					}
					paramHolder.positions.Add( i );
				}
				else {
					// don't care about other param types here, just those explicitly user-defined...

					// Steve Strong Note:  The original Java does not do this decrement; it increments i for
					// every parameter type.  However, within the Loader.GetParameterTypes() method, this introduces
					// nulls into the paramTypeList array, which in turn causes Loader.ConvertITypesToSqlTypes() to crash
					// with a null dereference.  An alternative fix is to change the Loader to handle the null.  I'm
					// not sure which fix is the most appropriate.
					// Legacy.FumTest.CompositeIDQuery() shows the bug if you remove the decrement below...
					i--;
				}

				i++;
			}

			_ordinalParameters = ordinalParameterList.ToArray();
			_namedParameters = new Dictionary<string, ParameterInfo>();

			foreach (NamedParamTempHolder holder in namedParameterMap.Values)
			{
				_namedParameters.Add(holder.name, new ParameterInfo( ArrayHelper.ToIntArray( holder.positions ), holder.type ));
			}
		}