views:

471

answers:

2

Here's a simple syntax question (I hope), I know how to constrain one generic type using the where clause, but how to constrain two generic types?

Maybe the easiest way is to write down what my best guess as to the syntax was.

public class GenericDaoGetByIdTests<TDao, TComponent> : BaseDaoTests 
  where TDao : IDao<TComponent>, TComponent : EDC2ORMComponent {
    public void GetByIdTest(int id) { }
}

This gives me an error. Anyone know what the proper syntax is?

+7  A: 

Use two 'where' keywords, for example I have a declaration like this:

public interface IParentNodeT<TChild, TSelf>
 where TChild : IChildNodeT<TSelf, TChild>, INodeT<TChild>
 where TSelf : IParentNodeT<TChild, TSelf>
{
 TChild childRoot { get; set; }
}
ChrisW
Awesome, thanks
George Mauer
+2  A: 

This should work:

public class GenericDaoGetByIdTests<TDao, TComponent> : BaseDaoTests 
  where TDao : IDao<TComponent> where TComponent : EDC2ORMComponent {
    public void GetByIdTest(int id) { }
}

you just repeat the where.

Raymond Roestenburg