尝试重用一些代码,并采用通用方法遵循DRY原则。该代码有点琐碎,但我无法对其进行编译。我想您会看到我在这里尝试做的事情(不是重复GetData(),而是有几个Logic()函数),我在做什么错了?
呼叫者:
IEnumerable<IMyClass> result = Factory.GetData<IEnumerable<IMyClass>>("storedProsedureName", Factory.LogicFunction());
逻辑:
public static IEnumerable<T> GetData<T>(string storedProsedureName, Func<string, OracleConnection, OracleCommand, IEnumerable<T>> functionCall) where T : class
{
using (OracleConnection conn = new OracleConnection(Helpers.GetConnectionString()))
{
using (OracleCommand cmd = conn.CreateCommand())
{
try
{
return functionCall(storedProsedureName, conn, cmd);
}
catch (Exception e)
{
throw e;
}
}
}
}
public static IEnumerable<IMyClass> LogicFunction(string storedProsedureName= "", OracleConnection conn = null, OracleCommand cmd = null)
{
conn.Open();
{...}
conn.Close();
return IEnumerable<IMyClass>;
}
错误:
参数2:无法转换
来自
'System.Collections.Generic.IEnumerable_IMyClass>'
到
'System.Func_string,OracleConnection,OracleCommand,IEnumerable _IEnumerable_IMyClass >>>'
答案 0 :(得分:1)
将您的呼叫者更改为以下代码。
删除了()
,并将通用关闭类型从IEnumerable<IMyClass>
更改为IMyClass
。
IEnumerable<IMyClass> result = Factory.GetData<IMyClass>("storedProsedureName", Factory.LogicFunction);