generics - C# - Access property in inheriting class -
i'm trying access generic typed property in child class. in below example recreated problem. there workaround problem, or not possible? in advance!
edit: it's not possible declare collection a<model> or a<t>.
public abstract class model { public int id { get; } } public interface i<t> t: model { icollection<t> results { get; } } public abstract class { } public class a<t> : a, i<t> t : model { public icollection<t> results { get; } } public class example { a[] col; void addsomemodels() { col = new a[] { new a<somemodel>(), new a<someothermodel>() } } void dosomethingwithcollection() { foreach (var in col) { // a.results not known @ point // possible achieve functionality? } } }
you can't intend without compromises.
first of all, need make interface i<t> covariant in t:
public interface i<out t> t : model { ienumerable<t> results { get; } } the first compromise therefore t can output. icollection<t> isn't covariant in t you'd need change type of results ienumerable<t>.
once this, following type safe , therefore allowed:
public void dosomethingwithcollecion() { var genericcol = col.oftype<i<model>>(); foreach (var in genericcol ) { //a.results accessible. } }
Comments
Post a Comment