如何约束多个泛型类型?

时间:2008-12-30 19:16:01

标签: c# generics syntax

这是一个简单的语法问题(我希望),我知道如何使用where子句约束一个泛型类型,但是如何约束两个泛型类型?

也许最简单的方法是记下我对语法的最佳猜测。

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

这给了我一个错误。任何人都知道正确的语法是什么?

2 个答案:

答案 0 :(得分:42)

使用两个'where'关键字,例如我有这样的声明:

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

答案 1 :(得分:5)

这应该有效:

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

你只需重复一下。