public void Set2DimensionalParameter <D1, D2, T>(string componentName, string fieldName, ParameterValues parameters, string parameterName) where T : struct where D1 : IDimension where D2 : IDimension { var fieldKey = new Tuple <string, string>(componentName.ToLowerInvariant(), fieldName.ToLowerInvariant()); if (!_dimensionalVariables.ContainsKey(fieldKey)) { throw new InvalidOperationException(); } var p = (ParameterValue2Dimensional <T>)parameters[parameterName.ToLowerInvariant()]; if (typeof(D1) == typeof(Timestep) && typeof(D2).BaseType == typeof(System.Enum)) { var value = new FieldParameter2DimensionalTime <D2, T>(this, p); _dimensionalVariables[fieldKey] = value; } else if (typeof(D1).BaseType == typeof(Enum) && typeof(D2).BaseType == typeof(Enum)) { var value = new FieldParameter2Dimensional <D1, D2, T>(this, p); _dimensionalVariables[fieldKey] = value; } else { throw new ArgumentException("Unknown dimension type"); } }
public void LoadTwoDimensionalVariableFromParameters <D1, D2, T>(string componentName, string fieldName, ParameterValues parameters, string parameterName) where T : struct where D1 : IDimension where D2 : IDimension { var p = (ParameterValue2Dimensional <T>)parameters[parameterName.ToLowerInvariant()]; if (typeof(D1) == typeof(Timestep) && typeof(IDimension).IsAssignableFrom(typeof(D2))) { var value = new FieldParameter2DimensionalTime <D2, T>(this, p); Add2DimensionalParameter <Timestep, D2, T>(componentName.ToLowerInvariant(), fieldName.ToLowerInvariant(), value); } else if (typeof(IDimension).IsAssignableFrom(typeof(D1)) && typeof(IDimension).IsAssignableFrom(typeof(D2))) { var value = new FieldParameter2Dimensional <D1, D2, T>(this, p); Add2DimensionalParameter <D1, D2, T>(componentName.ToLowerInvariant(), fieldName.ToLowerInvariant(), value); } else { throw new ArgumentException("Unknown dimension type"); } }