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>
这样就可以了:
public void Foo<T>(Func<T> p) where T : class
{
Func<object> f = () => p();
Foo(f);
}
在c# 4.0中瞄准。net 4.0(即使用方差),这是很好的"原样",因为有从T : class
到object
的引用保留转换。这是可能的,因为Func<T>
实际上定义为Func<out T>
,使其协变。
在以前版本的c#中,或者c# 4.0针对。net的早期版本,您需要按照Steven的答案进行翻译。
注意,您需要消歧以防止递归!最简单的是两个方法名。或者,Foo((Func<object>)p)
.