C# 如何检查泛型类型?
我有一个从DataSource类获取数据的类存储库 存储库:C# 如何检查泛型类型?,c#,generics,C#,Generics,我有一个从DataSource类获取数据的类存储库 存储库: public class Repository<TEntity> : IRepository<TEntity> where TEntity : class { protected readonly DataSource Context; public Repository(DataSource context) { Context = context; }
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected readonly DataSource Context;
public Repository(DataSource context)
{
Context = context;
}
public TEntity Get(int id)
{
return Context.Set<TEntity>().Find(id);
}
}
数据源:
public class DataSource
{
public IEnumerable<TEntity> Set<TEntity>() where TEntity : class
{
switch (typeof(TEntity))
{
case :
break;
default:
break;
}
}
}
我必须检查tenty的类型,并依赖于它,选择返回列表或列表的方法,等等。我该怎么做,或者有其他方法吗?请在启动开关盒之前尝试此方法
var objectName = typeof(TEntity).Name;
然后按大小写检查objectName。不要切换。如果不同类型需要不同的行为,那么为这些类型编写强类型方法。如果您正在实现的行为不是泛型的,那么不要使用泛型
public IEnumerable<Plane> Set<Plane>()
{
// ...
}
public IEnumerable<Flight> Set<Flight>()
{
// ...
}
请不要使用存储库反模式-如果您使用的是实体框架,那么DbContext就是您的存储库。同意,在EF已经提供给您的工作单元层之上创建存储库层确实是一种反模式,这是不受欢迎的。我将从以下几个方面给出一个坚实的智慧:每当你发现自己在一个泛型中打开一个类型,你几乎肯定是做错了什么。这是一项任务。除非这是学校的作业,否则你有责任不盲目服从命令,而是在任务不合理时通知你的上级,就像这里的情况一样。你有六个程序员告诉你这不好,不要这样做,并明确说明为什么不好。@J。。。是正确的;这真是个坏主意。不要这样做。如果您的方法在开关中有四个案例,那么只需编写四个方法,每种类型一个。因为这就是你正在做的;您只需将每个方法的主体放入案例部分。只需制定方法!