jas*_*son 3 .net c# generics datacontext linq-to-sql
我有一个通用类
public MyClass<TContext, T> where TContext : DataContext
Run Code Online (Sandbox Code Playgroud)
有效地作用于另一个人的实例
public class MyOtherClass<T> : IEnumerable<T>
Run Code Online (Sandbox Code Playgroud)
我想强制说TContext
有一个Table<T>
.有没有一种干净的方法来强制执行此操作?
您是否要验证TContext是否具有Table <T>的成员?如果是这样,唯一的方法是为此合约定义一个接口并更改通用约束
interface IMyTable<T> {
Table<T> Table;
}
public MyClass<TContext,T> where TContext : DataContext,IMyTable<T>
Run Code Online (Sandbox Code Playgroud)
编辑
杰森在我的回答中发表澄清评论.名称Table不是静态的,而是取决于T的类型.
如果是这种情况,那么就无法通过通用约束来静态强制执行此操作.您可以做的最好的事情是创建一个实现IMyTable <>的适配器类,并提供DataContext和Table实例.
interface IMyTable2<T> {
DataContext DataContext {get; }
Table<T> Table {get; }
}
class MyAdapter: IMyTable2<T> {
private MyOtherClass<T> _other;
public DataContext DataContext { get { return _other.DataContext } }
public Table<T> Table { get { return _other.TableWithDifferentName; } }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
498 次 |
最近记录: |