我有一个小问题,我需要一些帮助:)
public abstract class BaseDeFinition { public int Id { get;set; } public string Name { get;set; } }
和其他基类
public abstract class BaseParentClass { public string Name { get;set; } public string Schema { get;set; } }
和第一个通用抽象类
public abstrac class BaseParentClass<T> : BaseParentClass where T : BaseDeFinition { public IList<T> Objects {get;set;} }
和第一次实施
public class ClassADefintion : BaseDeFinition { public bool IsChanged {get;set;} } public class ClassAObject : BaseParentClass<ClassADeFinition> { public bool OtherField {get;set;} } public class ClassBDefintion : BaseDeFinition { public bool IsBBBChanged {get;set;} } public class ClassBObject : BaseParentClass<ClassBDeFinition> { public bool OtherBBBBField {get;set;} }
对于班级名称感到抱歉,但我无法创造更好的东西(这是唯一的例子)
正如我们所见,现在一切都好:).
IEnumerable<ClassBObject> ClassBObjectCollection; IEnumerable<ClassAObject> ClassAObjectCollection;
现在我必须创建一个方法,可以在IEnumerable中获取通用对象
public void DoWork(IEnumerable<BaseParentClass<BaseDeFinition>> objects) { foreach(var baSEObj in objects) { foreach(var baseDef in baSEObj.Objects) { // do some work } } }
我多么记得BaSEObject< BaseDeFinition> != ClassAObject,但编译器不会在屏幕上显示任何错误.我记得在通用接口的.NET中我们可以使用IN和OUT T,所以我尝试制作它
public interface IBaseParentClass<out T> where T : BaseDeFinition { IList<T> Objects {get;set;} }
是的,你不能列出< out T>.有人对这个问题有任何想法吗?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。