Casting Func<T> to Func<object>

本文关键字:gt lt Func object to Casting | 更新日期: 2023-09-27 18:01:29

我试图找出如何传递Func<T>Func<object>方法参数:

public void Foo<T>(Func<T> p) where T: class
{
    Foo(p);
}
public void Foo(Func<object> p)
{
}

奇怪的是,它在。NET 4.0类库中工作,但在Silverlight 4类库中不工作。实际上我想让它在Silverlight中工作,我有输入参数像Func<T, bool>

Casting Func<T> to Func<object>

这样就可以了:

public void Foo<T>(Func<T> p) where T : class
{
    Func<object> f = () => p();
    Foo(f);
}

在c# 4.0中瞄准。net 4.0(即使用方差),这是很好的"原样",因为有从T : classobject的引用保留转换。这是可能的,因为Func<T> 实际上定义为Func<out T>,使其协变。

在以前版本的c#中,或者c# 4.0针对。net的早期版本,您需要按照Steven的答案进行翻译。

注意,您需要消歧以防止递归!最简单的是两个方法名。或者,Foo((Func<object>)p) .