2010-12-27 13 views
1

ここに私の作品である私は.NET 4.0アクション<in T>はない

をコンパイルしない

IDictionary<Type, Action<BaseClass>> handlers = new Dictionary<Type, Action<BaseClass>>(); 

public void Register<T>(Action<T> handler) where T:BaseClass 
{ 
    handlers.Add(typeof(T),handler); 
} 

そのをやろうとしている何それは別の方法で可能ですか?

答えて

0
IDictionary<Type, Action<BaseClass>> handlers = new Dictionary<Type, Action<BaseClass>>(); 

public void Register<T>(Action<T> handler) where T:BaseClass 
{ 
Action<BaseClass> action = x=>handler((T)x); 
    handlers.Add(typeof(T),action); 
} 
4

他の方向でも共変量パラメータが機能します。

Action<in T>はすべてCat sが、これは合法である、またAnimalsあるので、あなたは

Action<Animal> baseProcessor = ...; 
Action<Cat> catProcessor = baseProcessor; 

を書くことができます。


は、私は私達はちょうど Cat取る関数に Dogを渡さ

Action<Cat> catProcessor = ...; 
Action<Animal> baseProcessor = catProcessor; 
baseProcessor(new Dog()); 

を書く場合に何が起こるか、あなたのコードが可能になっていました。