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

标签 c# linq generics entity-framework-6

我不确定我正在做的事情是否可行。 我有两种方法。这两个方法的主体完全相同,但是参数和返回的方法签名不同。传入参数的属性已更改,对象不同但属性名称相同(它们是两个不同的 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<> 的另一个原因是因为返回后我对它做了其他事情

最佳答案

我认为你有两个选择。

  1. 实现一个接口(interface)

    如果您创建一个包含所有共享属性和方法的接口(interface),您可以创建一个接受该接口(interface)的方法,或者在使用泛型时创建一个实现它的所有类型。 (是的,it is possible to implement an interface in EF generated classes)

  2. 使用动态

    dynamic 关键字会给您很大的自由度。您可以假装属性或方法是否存在。当您传入对象时,这会在运行时检查。您应该谨慎使用 dynamic,因为它会损害您的软件质量。

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

关于C# 泛型传递具有相同属性的不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174104/

相关文章:

泛型的 Java 简称

c# - 如何从线程刷新浏览? C#

c# - 泛型方法重载和优先级

java - 如何绑定(bind)子类的类类型

c# - 在 C# 中查找列表列表中第 N 个元素的最大值

c# - 如何在 C# 中左外连接两个数据表?

c# - 如何将两个不同的列表映射到一个列表?

c# - 如何正确关闭或销毁TCP客户端?

c# - 更新 Entity Framework 时出现错误

c# - 使用模拟进行单元测试。测试行为而不是执行