Один из способов устранить необходимость в переключателях - это использовать какой-то словарь для хранения делегатов, которые определяют, что составляет нуль для каждого возможного типа.Хотя я думаю, что вам придется придерживаться объекта для этого.Таким образом, у вас будет словарь, и вы установите его следующим образом:
private Dictionary<Type, Func<object, bool, bool>> _nullChecks = new Dictionary<Type, Func<object, bool, bool>>();
private void SetupNullChecks(){
_nullChecks.Add(typeof(string), (object parameterValue, bool isNullable) => { return (null == parameterValue || parameterValue.ToString() == NULL_STRING) && isNullable; });
_nullChecks.Add(typeof(int), (object parameterValue, bool isNullable) => { return (int)parameterValue == NULL_INT && isNullable; });
_nullChecks.Add(typeof(long), (object parameterValue, bool isNullable) => { return (long)parameterValue == NULL_LONG && isNullable; });
}
И ваш чек будет выглядеть так:
public void SetParameterValue(SqlParameter parameter, object parameterValue, bool isNullable)
{
if (_nullChecks[parameterValue.GetType()].Invoke(parameterValue, isNullable))
parameter.Value = DBNull.Value;
else parameter.Value = parameterValue;
}
Хотя, как предлагают другие, измените код для использованияОбнуляемый тип будет лучше.