(使用.NET 4.0)
好的,所以我有
private Dictionary<int, Action<IMyInterface, IMyInterface>> handler {get; set;}
public void Foo<T, U>(Action<T, U> myAction)
where T : IMyInterface
where U : IMyInterface
{
// | This line Fails
// V
Action<IMyInterface, IMyInterface> anotherAction = myAction;
handler.Add(someInt, anotherAction);
}
我试图将委托存储在通用集合中,以便稍后将其拉出以调用它。
我该如何正确施放它?
Action 委托的通用参数是类型逆变的;它们不是类型协变的。结果,你可以传入一个less具体类型,但是not a more具体类型。
所以编译如下:
protected void X()
{
Action<string> A = Foo;
}
void Foo(object s) { }
但这并没有:
protected void X()
{
Action<object> A = Foo;
}
void Foo(string s) { }
Since T and U : IMyInterface
,您的代码类似于第一个示例。
智能感知解释得相当清楚:(这是一个更大的版本 https://i.stack.imgur.com/VOpH3.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)