gpt4 book ai didi

c# - 如何最好地限制通用 类中的类型,其中所有类型都派生自相同的基类

转载 作者:行者123 更新时间:2023-11-30 20:32:29 25 4
gpt4 key购买 nike

我使用 Dynamics CRM(这在技术上与此讨论无关,但解释了此问题的一些背景故事)。有许多类型都派生自 Entity 类.我想创建一个 Class<T>() : where T: Entity ,但有进一步的限制,它只对派生自 Entity 的特定类进行操作.

我目前执行此操作的方法是使用 enum匹配我要使用的实体名称,if/else if/else我通过这些类型的方式,和throw如果传入了无效类型。

感觉很笨拙,我觉得我最好还是写这样的东西,

public class ProductConverter<t> where T: Entity (OpportunityProduct, QuoteProduct, AccountProduct)
{ ... }

这样类型引擎就可以说,“我们正在处理实体的基类,而且我们只处理实体的这些派生类型”。

我希望这能让我足够清楚地理解我在做什么 - 我的目的是我想创建一个引擎来处理实体记录之间的转换,可以扩展它而无需重新编写大量代码(实际上,添加映射和类型参数)。我相信有更好的方法可以做到这一点,所以如果您看到它们,请指出它们:)

edit@henk-holterman 问我是否可以更改类(class)。这是不可能的,因为它们是生成的类文件,用作 Dynamics CRM Web 服务的接口(interface)。

edit正如@jamiec 所指出的,这些类是 partial ,所以我可以通过在我希望修改的特定类上定义一个接口(interface)来做到这一点。

最佳答案

您的自动生成的类几乎肯定是部分的,这意味着您应该为每个实现共享接口(interface)的文件创建一个单独的文件

 public partial class QuoteProduct : IProduct 
{ // probably empty }

然后你可以通过接口(interface)来限制你的泛型类型:

public class ProductConverter<T> where T: Entity, IProduct 
{ // your implementation }

关于c# - 如何最好地限制通用 <T> 类中的类型,其中所有类型都派生自相同的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41462474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com