将信息添加到不可变类型的可接受模式是什么?

问题描述

我正在编写一些适用于集合的代码,并向其中添加更多信息。它以A开头,然后添加更多信息,例如,它计算A的“到期时间”并返回该值。 然后,根据当前用户以及A和B,计算允许的权限-并将其添加为C。

我开始使用Tuples,但是到了开始学习(E)时,类型定义变得笨拙且难以理解。

  1. 使用元组:

     IEnumerable<A> CreateA();   
     IEnumerable<Tuple<A,B>> AddB(IEnumerable<A>);  
     IEnumerable<Tuple<A,B,C>> AddC(IEnumerable<A,B>);  
     etc..
    

我正在考虑两个选项,创建代表元组的类型(下面的选项2),这意味着您不能在编译时未完成A和B的情况下创建C,或者使用带有运行时检查的可变对象(选项以下3)

  1. 用不同的类型替换小杯

     class AB { ctor(A,B),A A{get;},B B{get;} }  
     class ABC { ctor(A,C),B B{get;},C C{get;} }  
    
     IEnumerable<A> CreateA();  
     IEnumerable<AB> AddB(IEnumerable <A>)  
     IEnumerable<ABC> AddC(IEnumerable <AB>)  
     etc..
    
  2. 具有可变类型(进行一些运行时检查,例如B为空然后抛出...)。

     class ABC { ctor(A),B B{get;set;},C C{get;set;} }
    
     IEnumerable<ABC>  CreateA();  
     IEnumerable<ABC>  AddB(IEnumerable<ABC>); //Sets B  
     IEnumerable<ABC>  AddC(IEnumerable<ABC>); //If B is null throw,set C  
    

选项2看起来有点陌生,创建和命名类型几乎和选项A一样笨拙。我感觉自己已经偏离了常规。
我认为更多的程序员会理解选项3。

选项2是否有采用标准命名策略的标准接受模式-还是我应该放弃并选择选项3。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...