C#Generic传递具有相同属性的不同对象

我不确定我所做的事情是否可行。 我有2种方法。 2种方法的主体完全相同,但参数和返回方法的签名都不同。 传入的参数的属性已更改,对象不同但具有相同的属性名称(它们是两个不同的entity framework实体)。 从基础对象inheritance是不可能的(我认为)因为这些是entity framework实体。

最好展示示例,然后谈谈它..

方法1

private static IQueryable ApplyMapFilterToListings(IQueryable listings, ListingSearchCriteria criteria, bool boolIsPremiumListingsOnly = false) { //setting properties of listings (of type MapListing Entity) } 

方法2

 private static IQueryable ApplyFilterToListings(IQueryable listings, ListingSearchCriteria criteria, bool boolIsPremiumListingsOnly = false) { //setting properties of listings (of type vListing Entity) } 

一般来说,我不介意函数体是否完全相同,但是在这种情况下,很多属性都是有条件设置的,我想让这些方法完全相同,并且certificate它们不同步。

我还在退回IQueryable 的原因是因为我在返回后做了其他的事情

在我看来,你有两个选择。

  1. 实现一个interface

    如果创建包含所有共享属性和方法的接口,则可以创建一个接受该接口的方法,或者在使用generics时,创建实现它的所有类型。 (是的, 可以在EF生成的类中实现接口 )

  2. 使用dynamic

    dynamic关键字将为您提供很多自由。 您可以假装存在属性或方法。 传入对象时会在运行时检查此项。 您应该谨慎使用dynamic ,因为它会损害您的软件质量。

第一种选择是首选。 这是最好的解决方案,但它要求您可以访问类。 如果类在第三方库中, dynamic可能是您唯一的解决方案。