C#将Func <T1,object>转换为Func <T1,T2>

Joh*_*tos 13 c# generics lambda

我毫不怀疑这是尽可能容易做到的,但我有一个函数创建器库,它为我创建了以下形式的lambda函数:

Func<T1, object>
Run Code Online (Sandbox Code Playgroud)

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

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

但是,当我尝试这个时,我会回来null(顺便说一句,如果我回来的话objFunc,Func<T1, object>它不是空的,所以我知道这不是我的问题所在).

我该怎么做呢?

Tyr*_*son 16

尝试:

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


Str*_*ior 10

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

return t1 => (T2)objFunc(t1);
Run Code Online (Sandbox Code Playgroud)