将逻辑功能作为参数传递给通用功能

时间:2018-09-27 09:02:17

标签: c#

尝试重用一些代码,并采用通用方法遵循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 >>>'

1 个答案:

答案 0 :(得分:1)

将您的呼叫者更改为以下代码。

删除了(),并将通用关闭类型从IEnumerable<IMyClass>更改为IMyClass

IEnumerable<IMyClass> result = Factory.GetData<IMyClass>("storedProsedureName", Factory.LogicFunction);