在 C# 中,如何使用具有两种不同类型的泛型?

杰瑞

我有一些由实体框架创建和维护的类。这些类代表我的数据库中的表。在其中两个表中,我有非常相似的字段。例如(伪对象):

public class RandomObject1
{
    int Identifier { get; set; }
    int ObjectType { get; set; }
    int SourceID   { get; set; }
    string OriginationPont { get; set; }
    string PhoneNumber { get; set; }
    decimal Cost { get; set; }

    int OtherThing1 { get; set; }
    int OtherThing2 { get; set; }
    int OtherThing3 { get; set; }
}

public class RandomObject2
{
    int Identifier { get; set; }
    int ObjectType { get; set; }
    int SourceID   { get; set; }
    string OriginationPont { get; set; }
    string PhoneNumber { get; set; }
    decimal Cost { get; set; }

    double CashValue1 { get; set; }
    decimal Snowman2 { get; set; }
    int BigFurryTree3 { get; set; }
}

请注意,这两个对象的前几个字段是相同的,填充这些字段的过程也相同。通常在这些情况下,我会有一个接口来声明前几个字段,以便我可以将此对象作为接口传递给各种进程。

但是,在这种情况下,我不控制构建这些类的代码,并且真的不希望每次重新生成时都必须从实体框架中编辑生成的 .cs 文件。

我想知道我是否缺少使用泛型来执行以下操作的巧妙方法:

// This method will populate SourceID, OriginationPoint, PhoneNumber and Cost
public void GenerateOriginationInformation<T>(ValidationInformation info, T objectToManipulate) where T : RandomObject1 || RandomObject2
{
    objectToManipulate.SourceID = GenerateSourceID(info);
    objectToManipulate.OriginationPoint = GenerateOriginationPoint(info);
    objectToManipulate.PhoneNumber = FindPhoneNumberByOrigination(info);
    objectToManipulate.Cost = DetermineCostBySourceAndOrigination(info);
}

现在,我必须构建一个完整的对象/层来填充并返回正确的对象,但导致我为这些事情做了两次大部分代码!

public void GenerateOriginationInformation(ValidationInformation into, RandomObject1 objectToManipulate) 
{
    objectToManipulate.SourceID = GenerateSourceID(info);
    objectToManipulate.OriginationPoint = GenerateOriginationPoint(info);
    objectToManipulate.PhoneNumber = FindPhoneNumberByOrigination(info);
    objectToManipulate.Cost = DetermineCostBySourceAndOrigination(info);
}

public void GenerateOriginationInformation(ValidationInformation into, RandomObject2 objectToManipulate) 
{
    objectToManipulate.SourceID = GenerateSourceID(info);
    objectToManipulate.OriginationPoint = GenerateOriginationPoint(info);
    objectToManipulate.PhoneNumber = FindPhoneNumberByOrigination(info);
    objectToManipulate.Cost = DetermineCostBySourceAndOrigination(info);
}

起初,这看起来还不错,但是为了解释和简洁起见,这段代码被高度简化了。由于我无法实现接口,是否有一种更简洁的方法可以使用泛型使这两种方法合二为一?

伊戈尔

I don't control the code that builds these classes, and really don't want to have to edit the resulting .cs files from the Entity Framework every time it is regenerated

在评论中回答:“它是 EDMX”

从您的 EDMX 设计器生成的类默认是部分的(您不需要额外的工作),因此您可以在生成的文件旁边创建一个代码文件partial,并在其中使类型实现接口。

生成类

public partial class RandomObject1

你的代码文件放在同一个项目中

public partial class RandomObject1 : ICommonInterface

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#中具有两种不同数据类型的二维数组

来自分类Dev

C#如何对具有泛型类型的两个类使用一种方法?

来自分类Dev

在C ++函数中返回两种不同类型的两个值

来自分类Dev

在C#中,如何将具有不同数量和参数类型的两种方法转换为一种?

来自分类Dev

JSON.NET:定义可以容纳两种不同类型对象的C#字段

来自分类Dev

在C#中是否可以使用具有1种以上返回类型的函数?

来自分类Dev

C中具有不同类型的外部变量

来自分类Dev

如何在C#中收集具有泛型类型的静态类的所有“实例”?

来自分类Dev

如何在C ++中处理具有多个不同类型的数据成员的类?

来自分类Dev

在C ++中,如何使构造函数具有不同类型的参数?

来自分类Dev

在Elasticsearch中搜索具有不同映射的两种不同类型

来自分类Dev

如何在C#中对具有抽象内部类型的泛型进行模式匹配?

来自分类Dev

在C中具有相同大小的两个不同类型之间有什么区别?

来自分类Dev

在C#中使用具有“递归”关系的泛型

来自分类Dev

具有两个泛型参数的C#中的泛型方法

来自分类Dev

在C#中检查T泛型类型具有属性S(泛型)

来自分类Dev

C ++类中的两种不同的变量初始化。有什么不同?

来自分类Dev

如何在MATLAB中从两种不同类型的目录加载所有文件

来自分类Dev

如何在MATLAB中从两种不同类型的目录中加载所有文件

来自分类Dev

如何使用用户输入比较列表中的两种不同类型?

来自分类Dev

C ++中的两种不同的混合模式。(mixin?CRTP?)

来自分类Dev

如何在C中访问与两种不同数据类型(uint64_t / uint8_t [8])相同的内存地址?

来自分类Dev

具有相同类和相同类列表的 C# 泛型

来自分类Dev

C ++在不同类型的向量上具有相同的功能

来自分类Dev

具有返回不同类型子项的抽象类中的C#抽象方法

来自分类Dev

在C#中反序列化具有不同类型名称的XML元素

来自分类Dev

在C中实现2个具有相同类型和名称但参数不同的函数

来自分类Dev

C ++:使用模板折叠具有不同类型和功能的重复代码

来自分类Dev

cppreference是否使用术语“ [对象的身份]”对c ++ 11和c ++ 17有两种不同的含义?

Related 相关文章

  1. 1

    C#中具有两种不同数据类型的二维数组

  2. 2

    C#如何对具有泛型类型的两个类使用一种方法?

  3. 3

    在C ++函数中返回两种不同类型的两个值

  4. 4

    在C#中,如何将具有不同数量和参数类型的两种方法转换为一种?

  5. 5

    JSON.NET:定义可以容纳两种不同类型对象的C#字段

  6. 6

    在C#中是否可以使用具有1种以上返回类型的函数?

  7. 7

    C中具有不同类型的外部变量

  8. 8

    如何在C#中收集具有泛型类型的静态类的所有“实例”?

  9. 9

    如何在C ++中处理具有多个不同类型的数据成员的类?

  10. 10

    在C ++中,如何使构造函数具有不同类型的参数?

  11. 11

    在Elasticsearch中搜索具有不同映射的两种不同类型

  12. 12

    如何在C#中对具有抽象内部类型的泛型进行模式匹配?

  13. 13

    在C中具有相同大小的两个不同类型之间有什么区别?

  14. 14

    在C#中使用具有“递归”关系的泛型

  15. 15

    具有两个泛型参数的C#中的泛型方法

  16. 16

    在C#中检查T泛型类型具有属性S(泛型)

  17. 17

    C ++类中的两种不同的变量初始化。有什么不同?

  18. 18

    如何在MATLAB中从两种不同类型的目录加载所有文件

  19. 19

    如何在MATLAB中从两种不同类型的目录中加载所有文件

  20. 20

    如何使用用户输入比较列表中的两种不同类型?

  21. 21

    C ++中的两种不同的混合模式。(mixin?CRTP?)

  22. 22

    如何在C中访问与两种不同数据类型(uint64_t / uint8_t [8])相同的内存地址?

  23. 23

    具有相同类和相同类列表的 C# 泛型

  24. 24

    C ++在不同类型的向量上具有相同的功能

  25. 25

    具有返回不同类型子项的抽象类中的C#抽象方法

  26. 26

    在C#中反序列化具有不同类型名称的XML元素

  27. 27

    在C中实现2个具有相同类型和名称但参数不同的函数

  28. 28

    C ++:使用模板折叠具有不同类型和功能的重复代码

  29. 29

    cppreference是否使用术语“ [对象的身份]”对c ++ 11和c ++ 17有两种不同的含义?

热门标签

归档