将泛型类型参数lambda委托转换为对象

时间:2016-05-31 18:40:06

标签: c# generics lambda delegates

我有以下方法:

void Foo<T1>(Func<T1, Exception> exceptionFunc)
{
   // Following line error: "Cannot convert from 'object' to 'T1'
   Func<object, Exception> exF = (e) => exceptionFunc(e);
   Foo2(exF);
}

我似乎无法弄清楚如何将Func的通用参数T1强制转换为object Foo2()所需的任何想法这样成功吗?

1 个答案:

答案 0 :(得分:1)

您必须将对象转换为T1:

void Foo<T1>(Func<T1, Exception> exceptionFunc)
{
    // Following line error: "Cannot convert from 'object' to 'T1'
    Func<object, Exception> exF = obj => exceptionFunc((T1)obj);
    Foo2(exF);
}

注意:如果对象与T1不兼容,则会在运行时抛出无效的强制转换异常。