Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>while awaiting some C# genius to come along with the answer to all my problems I have implemented the trick that IEnumerable also uses:</p> <p>I added a method <code>public IDescribedEnumerable&lt;IDescribedModel&gt; AsIDescribedModels()</code> to the IDescribedEnumerable interface and created a new class <code>GenericDescribedEnumerable&lt;T&gt; : IDescribedEnumerable&lt;IDescribedModel&gt;</code>. In my <code>DescribedEnumerable&lt;T&gt;</code> class I create a GenericDescribedEnumerable and return that. In the GenericDescribedEnumerable I return <code>this</code></p> <p>in full code:</p> <pre><code>public interface IDescribedModel&lt;T&gt; : IDescribedModel{ T original { get; } } public interface IDescribedEnumerable { IDescribedEnumerable&lt;IViewModel&gt; AsIViewModels(); } public interface IDescribedEnumerable&lt;T&gt; : IDescribedEnumerable where T : IDescribedModel{ IEnumerable&lt;T&gt; GetViewModels(); } public class DescribedEnumerable&lt;T&gt; : IDescribedEnumerable&lt;IDescribedModel&lt;T&gt;&gt;{ public DescribedEnumerable(IEnumerable&lt;T&gt; enumerable) {} public IDescribedEnumerable&lt;IViewModel&gt; AsIViewModels() { return new GenericDescribedEnumerable&lt;T&gt;(/*allProperties*/); } public IEnumerable&lt;T&gt; GetViewModels() { foreach ( T obj in _enumerable ) { var vm = new DescribedModel&lt;T&gt;( obj); yield return vm; } } } public class GenericDescribedEnumerable&lt;T&gt; : IDescribedEnumerable&lt;IViewModel&gt;{ //pass in the constructor everything you need, or create in the //constructor of DescribedEnumerable&lt;T&gt; public GenericDescribedEnumerable(/*allProperties*/) { } public IEnumerable&lt;IViewModel&gt; GetViewModels() { foreach ( T obj in _enumerable ) { var vm = new PlatoViewModel&lt;T&gt;( obj ); yield return vm; } } public IDescribedEnumerable&lt;IViewModel&gt; AsIViewModels() { return this; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload