我不确定我正在做的事情是否可行。 我有两种方法。这两个方法的主体完全相同,但是参数和返回的方法签名不同。传入参数的属性已更改,对象不同但属性名称相同(它们是两个不同的 Entity Framwork 实体)。从基础对象继承两者是不可能的(我认为),因为它们是 Entity Framework 实体。
最好展示例子然后再讨论..
方法一
private static IQueryable<MapListing> ApplyMapFilterToListings(IQueryable<MapListing> listings, ListingSearchCriteria criteria, bool boolIsPremiumListingsOnly = false)
{
//setting properties of listings (of type MapListing Entity)
}
方法二
private static IQueryable<vListing> ApplyFilterToListings(IQueryable<vListing> listings, ListingSearchCriteria criteria, bool boolIsPremiumListingsOnly = false)
{
//setting properties of listings (of type vListing Entity)
}
通常我不会介意函数体是否完全相同,但是在这种情况下,很多属性都是有条件地设置的,我想让这些方法完全相同,并且愚蠢地证明它们不同步。
我返回 IQueryable<> 的另一个原因是因为返回后我对它做了其他事情
最佳答案
我认为你有两个选择。
实现一个
接口(interface)
如果您创建一个包含所有共享属性和方法的接口(interface),您可以创建一个接受该接口(interface)的方法,或者在使用泛型时创建一个实现它的所有类型。 (是的,it is possible to implement an interface in EF generated classes)
使用
动态
dynamic
关键字会给您很大的自由度。您可以假装属性或方法是否存在。当您传入对象时,这会在运行时检查。您应该谨慎使用dynamic
,因为它会损害您的软件质量。
首选第一个选项。这是最好的解决方案,但它要求您能够访问这些类。如果类在第三方库中,dynamic
可能是您唯一的解决方案。
关于C# 泛型传递具有相同属性的不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174104/