gpt4 book ai didi

c# - 替换类型检查的条件链

转载 作者:行者123 更新时间:2023-11-30 14:18:16 24 4
gpt4 key购买 nike

我今天偶然发现了一些类似于以下的代码:

  if (myObject is MyClass1) 
myOtherObject = new MyOtherClass1(myObject);
else if (myObject is MyClass2)
myOtherObject = new MyOtherClass2(myObject);
else if (myObject is MyClass3)
myOtherObject = new MyOtherClass3(myObject);
else if (myObject is MyClass4)
myOtherObject = new MyOtherClass4(myObject);
else if (myObject is MyClass5)
myOtherObject = new MyOtherClass5(myObject);
else if (myObject is MyClass6)
// ...

我发现这有点难以维护,想用不那么麻烦的东西替换它。我有哪些选择?

到目前为止,我已经考虑过使用字典的表驱动方法,但我不确定这是否是最佳选择。

// Not even sure this is valid syntax.
foreach (myClass in classes)
if myObject is myClass
new classes[myClass](myObject);

还有其他想法吗?

更新

这里不深入介绍这些类的基本结构:

MyBaseClass                              MyOtherBaseClass
| |
-MyClass1 -MyOtherClass1
| |
-MyClass2 -MyOtherClass2

MyBaseClass 及其后代是我认为的持久数据传输对象。他们以类特定格式存储数据。

我能描述的最接近 MyOtherBaseClass 及其后代的是单向数据映射器 [PoEAA]但它们也混合了一些业务逻辑。

数据库仅保存足够的信息来定位对象和跟踪它们的状态。

最佳答案

你可以考虑在 MyClass1MyClass2 等的基类中有一个抽象方法 generateOtherObject() 吗?派生类创建相关类型的新对象?

关于c# - 替换类型检查的条件链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788078/

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