【发布时间】:2017-03-16 21:04:21
【问题描述】:
进行了搜索,但找不到任何关于此的内容,所以我认为目前可能不可能。
给定以下两个元组
var a = (a: "1", b: 2);
var b = (c: "2", d: 0.1);
我是否可以将这些对象动态组合/合并为一个
var c = a + b;
理想情况下,属性的名称保持不变,因此我们仍然可以执行以下操作
var d = c.b + c.d;
我知道我可以执行以下操作,但这不适用于我想要实现的目标
var c = (first:a, second:b);
我正在寻找一个通用的解决方案,即我不在乎每个元组中有多少属性。
此外,我知道如果有两个同名的属性可能会发生什么问题。在这种情况下,我很高兴属性被覆盖或名称被更改,例如它变成了 a_1。
【问题讨论】:
-
你可能有元组的元组,但你为什么要这样做呢?如果您的模型变得如此复杂,请创建一个真正的类来保存这些值。
-
我想编写一个流畅的 API,它可以转发管道数据,同时仍然保持静态类型的属性名称。我知道我可以使用动态,但如果这是可能的,它将导致一个非常简洁的解决方案。例如,设想一个流畅的测试运行器,它可以通过管道将变量重用到下一步,向上下文添加更多数据只需将其他属性合并到元组中。
-
@jps 如果您想保留元组成员名称,这是不可能的。只需连接两个元组以获得更大的元组即可使用扩展方法完成,但无法保留名称。如果您想要静态检查名称,您应该真正考虑创建真实类型而不是依赖元组。
-
元组不实现
+运算符。如果他们这样做了,(x, y) + (a, b)的结果可能是(x + a, y + b),而不是(x, y, a, b)。