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 的原因是因为我在返回后做了其他的事情
在我看来,你有两个选择。
-
实现一个
interface
如果创建包含所有共享属性和方法的接口,则可以创建一个接受该接口的方法,或者在使用generics时,创建实现它的所有类型。 (是的, 可以在EF生成的类中实现接口 )
-
使用
dynamic
dynamic
关键字将为您提供很多自由。 您可以假装存在属性或方法。 传入对象时会在运行时检查此项。 您应该谨慎使用dynamic
,因为它会损害您的软件质量。
第一种选择是首选。 这是最好的解决方案,但它要求您可以访问类。 如果类在第三方库中, dynamic
可能是您唯一的解决方案。