如何指定泛型约束:从接口继承的类?

时间:2012-03-18 09:26:49

标签: c# linq generics

如何指定该类型应该是从Interface继承的类?我尝试了各种变体,但没有任何意义。

public class CarDal<TCarMark> where TCarMark:class//also tried ICarMark
{
    ...
    private static readonly DataContext Context = new DataContext(ConnectionString);
    private Table<ICarMark> _tblCarMarks = Context.GetTable<TCarMark>();//Error is "Cannot convert source type 'Table<TCarMark> to target type Table<ICarMark>'"
    ...
}

1 个答案:

答案 0 :(得分:5)

您的约束,特别是结合您引用的两种形式,很好:

 where TCarMark : class, ICarMark

问题是差异。

Table<TCarMark>Table<ICarMark>没有协变/逆变关系

您必须在此课程中使用Table<TCarMark>

private Table<TCarMark> _tblCarMarks = Context.GetTable<TCarMark>();
// emphasis: ^^^

然而!不要使用静态数据上下文:

  • 它不是线程安全的
  • 这意味着您的数据上下文会随着时间的推移而增长(它应该是一个工作单元,而不是应用程序生命周期对象)