C#将Func <t1,object =“”>转换为Func <t1,t2 =“”>

时间:2015-08-18 16:54:27

标签: c# generics lambda

我毫不怀疑这很容易做到,但我有一个函数创建器库,可以为我创建lambda函数:

Func<T1, object>

我希望更具体地指定out参数 - 基本上,我希望能够创建以下内容:

private Func<T1, T2> GetFunc<T1, T2>(string expression)
{
    Func<T1, object> objFunc = CreateFunction(expression));
    return objFunc as Func<T1, T2>;
}

但是,当我尝试这个时,我会回到null(顺便说一下,如果我将objFunc作为Func<T1, object>返回,它不是空的,所以我知道这不是我的问题在哪里。)

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:16)

尝试:

private Func<T1, T2> GetFunc<T1, T2>(string expression)
{
    Func<T1, object> objFunc = CreateFunction(expression));
    return arg=>(T2)objFunc(arg);
}

答案 1 :(得分:10)

是否可以简单地将现有的函数调用包装在对返回值执行强制转换的另一个函数中?

return t1 => (T2)objFunc(t1);