显式铸造问题

// The Structure of the Container and the items public interface IContainer  where TItem : IItem { } public class AContainer : IContainer { } public interface IItem { } public class ItemA : IItem { } // Client app [Test] public void Test () { IContainer container = new AContainer(); } 

问题:在测试中发生以下错误。 什么可以成为铸造的解决方案?

无法隐式将“AContainer”类型转换为“IContainer”。 存在显式转换(您是否错过了演员?)

另一个generics协变问题……

.NET中的generics类型不是协变或逆变 – IContainer (这是AContainer所属的)不是IContainer 的子类 – 两者之间没有有效的强制转换。 这将在C#4中修复。

如果您想使用AContainer作为IContainer ,您还需要实现此接口:

 public class AContainer : IContainer, IContainer 

您可以明确地实现它。

您还可以考虑Krzysztof Cwalina的.NET Generics的模拟协方差