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

Yar*_*ara 2 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>'"
    ...
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

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

 where TCarMark : class, ICarMark
Run Code Online (Sandbox Code Playgroud)

问题是差异.

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

你必须使用Table<TCarMark>这个类:

private Table<TCarMark> _tblCarMarks = Context.GetTable<TCarMark>();
// emphasis: ^^^
Run Code Online (Sandbox Code Playgroud)

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

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