Как ограничить несколько универсальных типов?

Вот простой синтаксический вопрос (надеюсь): я знаю, как ограничить один общий тип с помощью предложения where, но как ограничить два общих типа?

Возможно, самый простой способ — записать то, что я предположил относительно синтаксиса.

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

Это дает мне ошибку. Кто-нибудь знает, каков правильный синтаксис?


person George Mauer    schedule 30.12.2008    source источник


Ответы (2)


Используйте два ключевых слова «где», например, у меня есть такое объявление:

public interface IParentNodeT<TChild, TSelf>
    where TChild : IChildNodeT<TSelf, TChild>, INodeT<TChild>
    where TSelf : IParentNodeT<TChild, TSelf>
{
    TChild childRoot { get; set; }
}
person ChrisW    schedule 30.12.2008

Это должно работать:

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

вы просто повторяете где.

person Raymond Roestenburg    schedule 30.12.2008