![]() |
1
1
有
实施平等成员的规则几乎如下:
如你所见,如果你要依靠
此外,它将是最快的选择,因为它只依赖于虚拟方法。否则,你还是会有一些反省。
|
![]() |
2
1
简短的回答是“是的”,但较长的回答是,这是可能的,但需要你付出不小的努力和一些假设,才能使它发挥作用。当您的值在强类型代码中进行比较时被认为是“相等”的,但没有引用相等时,您的问题就会真正出现。你最大的冒犯者将是价值类型,如盒装
考虑到这一点,你必须走上使用诸如
请记住,类型必须完全匹配。换句话说,一个
您还可以沿着使用反射动态调用
|
![]() |
3
1
您需要测试的类型列表是预先确定的列表吗?如果是,您可以使用 Visitor Pattern (即使没有,因为我们有仿制药)。在接受接口的实体(可以使用分部类)上创建方法。然后,类在该接口上调用一个传递自身的方法。接口方法可以是泛型的,也可以为要测试的每个类型创建重载。 否则电池会死掉。 点击“保存”15秒后,机器进入休眠状态。 经过思考,访问者模式可能无法解决您的特定问题。我以为你在尝试比较实体,但你似乎在测试值(所以很可能是整数和字符串)。 但是为了完成任务,并且因为一旦你意识到访客模式的作用,它就很酷了,这里有一个解释。 访问者模式允许您处理多个类型,而无需了解如何强制转换为特定类型(使用该类型将类型与项分离)。它通过两个接口工作——访问者和接受者:
您可以选择在这里使用一个通用方法:
接受方法的基本实现是:
因为实现accept()的类型知道它是什么类型,所以使用了正确的重载(或泛型类型)。您可以使用反射和查找表(或select语句)来实现相同的功能,但这要干净得多。另外,您不必在不同的实现之间重复查找——不同的类可以实现IVisitor来创建特定于类型的功能。 访客模式是执行“双重调度”的一种方式。答案 this question 这是另一种方式,你可以把它变形成适合你具体情况的东西。 基本上,一个长篇大论的回答你的问题,对不起。:)这个问题引起了我的兴趣,但是——比如,您如何知道应该测试实体的哪些属性? |
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
milczi · Swift通用无强制展开向下投射 6 年前 |
![]() |
bugs · Typescript-泛型类型扩展自身 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
![]() |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
![]() |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |