次のスニペットでエラーが発生しない理由を理解するのに問題があります
public void SomeMethod<T>(T arg) where T : MyInterface
{
MyInterface e = arg;
}
しかし、これはジェネリック型の制約のために機能すると予想されます
private readonly IList<Action<MyInterface>> myActionList = new List<Action<MyInterface>>();
public IDisposable Subscribe<T>(Action<T> callback) where T: MyInterface
{
myActionList.Add(callback); // doesn't compile
return null
}
このエラーが発生します
cannot convert from 'System.Action<T>' to 'System.Action<MyInterface>'
VS2012sp1と.NET4.5を使用しています。
制約がこれをコンパイルできない理由を誰かが説明できますか?