2011-04-01 98 views
0

我想将对象类型传递给方法。我为我的CRUDRepository这样做是由其他存储库继承的,但我无法弄清楚如何知道我正在处理的类型。C# - 传递方法参数中的对象类型

例如:

public PageOf<Entity> GetPageOfEntity(int pageNumber, int pageSize) 
    { 
    // Here i need to work with the entity type to make calls to database 
    } 

实体是可以被其他实体(用户,产品,等等),并且该方法返回一个分页结果继承一个对象。我这样做是为了避免为我创建的每个实体创建一个GetPageOf方法。

什么是正确的方式传递给我想要在分页结果中处理的对象类型的方法?

编辑:

这里的实体

 public abstract class Entity 
    { 
    public virtual long Id { get; set; } 
    public virtual DateTime Created { get; set; } 
    } 

而且用户对象例如:

 public class User : Entity 
    { 
    public string FirstName { get; set; } 
    } 

因为我试图写一个类来处理一些crud操作,我需要知道在方法中我使用了什么对象(但我试图现在为每个对象类型创建一个方法)

感谢

+0

更多的代码和细节将有所帮助。你在寻找传球吗?可能你可以有一个类型为“T”的入站参数,然后可能实例化并在实例上执行一个GetType()来检查它是什么类型并构建该类型的pageOf并返回。 – 2011-04-01 08:25:02

+0

我想他在问什么是如何解决T回数据上下文中的表.. – MattDavey 2011-04-01 08:28:47

+0

可能重复http://stackoverflow.com/questions/10955579/passing-just-a-type-as-a-parameter -in-c-sharp – 2013-06-16 03:23:57

回答

5

使该方法一般:

public PageOf<TEntity> GetPageOfEntity<TEntity>(int pageNumber, int pageSize) 
    where TEntity : Entity 
{ 
    Type entityType = typeof(TEntity); 
    ... 
} 
+0

感谢队友。我将阅读有关泛型方法和类的知识,以了解这种工作方式。 – 2011-04-01 08:28:12

+0

您是否还需要'TEntity'类型的参数来获取页面? – 2011-04-01 08:34:44

+0

@菲尔:不,但在这种情况下不能使用类型推断。只要你明确指定类型patameter,你就很好。 – 2011-04-01 09:05:12

0

我不知道,我正确地理解你的问题,但你不能只使用一个通用的参数?

public PageOf<Entity> GetPageOfEntity<TEntity>(int pageNumber, int pageSize) 
    where TEntity : Entity 
{ 
// Here i need to work with the entity type to make calls to database 
} 
+0

对不起,但我的英语不完美(我是葡萄牙语),有时我真的不能表达自己!但是,通用参数是我需要的。谢谢 ;) – 2011-04-01 08:34:30