C# 如何检查泛型类型?

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; }

我有一个从DataSource类获取数据的类存储库

存储库:

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。。。是正确的;这真是个坏主意。不要这样做。如果您的方法在开关中有四个案例,那么只需编写四个方法,每种类型一个。因为这就是你正在做的;您只需将每个方法的主体放入案例部分。只需制定方法!