<p>I would like to specify a constraint which is another type with a generic argument.</p>

<pre><code>class KeyFrame&lt;T&gt;
{
    public float Time;
    public T Value;
}

// I want any kind of Keyframe to be accepted
class Timeline&lt;T&gt; where T : Keyframe&lt;*&gt;
{
}
</code></pre>

<p>But this cannot be done in c# as of yet, (and I really doubt it will ever be). Is there any elegant solution to this rather than having to specify the type of the keyframe argument?:</p>

<pre><code>class Timeline&lt;TKeyframe, TKeyframeValue&gt; 
     where TKeyframe : Keyframe&lt;TKeyframeValue&gt;,
{
}
</code></pre>

As TimeLine is most likely an aggregation of KeyFrames, wouldn't something like:
```
```
class TimeLine<T>
{
private IList<KeyFrame<T>> keyFrameList;
...
}
```
```
fulfill your requirements nicely?