Вы можете использовать dictionary
для удержания клавиши (commandType
) и значения различных Func<>
, а затем просто получить func
с помощью клавиши и выполнить его.
public static Dictionary < string, Func<string, parameters, IDataReader> dbMethods =
new Dictionary<string, Func<string, parameters, IDataReader>();
public static void CreateMethodDictionary()
{
dbMethods.Add(CommandType.StoredProcedure, GetReaderByProc);
dbMethods.Add(CommandType.Text, GetReaderByText);
}
И тогда вы можете вызвать его как:
IDataReader dataReader = dbMethods[commandType].Invoke(proc, parameters);
Это предполагает, что обе ваши вызывающие функции принимают одни и те же параметры (что в настоящее время не так) и возвращают один и тот же объект.
Глядя на код, хотя ваш текстовый запрос также должен принимать параметры, поскольку параметризованные запросы должны быть нормой.