Это вопрос дизайна класса.
У меня есть основной абстрактный класс
public abstract class AbstractBlockRule
{
    public long Id{get;set;}
    public abstract List<IRestriction> Restrictions {get;};
}
public interface IRestriction{}
public interface IRestriction<T>:IRestriction where T:struct
{
    T Limit {get;} 
}
public TimeRestriction:IRestriction<TimeSpan>
{
    public TimeSpan Limit{get;set;}
}
public AgeRestriction:IRestriction<int>
{
    public int Limit{get;set;}
}
public class BlockRule:AbstractBlockRule
{
    public virtual List<IRestriction> Restrictions {get;set;}
}
BlockRule rule=new BlockRule();
TimeRestriction t=new TimeRestriction();
AgeRestriction a=new AgeRestriction();
rule.Restrictions.Add(t);
rule.Restrictions.Add(a);
Мне нужно использовать не общий интерфейс IRestriction, чтобы избежать указания общего типа T в основном абстрактном классе. Я очень новичок в дженериках. Может кто-нибудь дать мне знать, как лучше спроектировать эту вещь?