gpt4 book ai didi

c# - 如何避免大的 if 语句?

转载 作者:太空狗 更新时间:2023-10-30 00:32:33 25 4
gpt4 key购买 nike

我确信有一种更面向对象的方法可以做到这一点,但我不确定该怎么做。我有不同的“报告”对象(例如 Report1、Report2、Report3 等)。我有一个服务对象,它将这些报告对象作为方法中的两个参数。在该方法中,我有一个很大的 if else block 语句,用于确定将哪两个报表对象传递到该方法中。这个逻辑好像不是面向对象的,难道没有更好的方法来确定我传入了哪两个报告,然后为这两个报告提供正确的逻辑,这样我就没有一个螺旋式上升的if-else block 控制并最终变成 100 多行?命令模式在这里工作得很好还是有更好的以对象为中心的模式?

Report1 r1 = new Report1();
Report2 r2 = new Report2();
Report3 r3 = new Report3();
Report4 r4 = new Report4();
etc...

SomeServiceObject serviceObj = new SomeServiceObject();
var returnedData1 = serviceObj.GetReportLogic(r1, r2);
var returnedData2 = serviceObj.GetReportLogic(r1, r3);
var returnedData3 = serviceObj.GetReportLogic(r3, r4);
etc..

public GetReportLogic(object someReport1, object someReport2)
{
if ((someReport1 as Report1) and (someReport2 as Report1))
{
DoSomething();
}
else if ((someReport1 as Report1) and (someReport2 as Report2))
{
DoSomethingElse();
}
else if ((someReport1 as Report1) and (someReport2 as Report3))
{
DoSomethingElseAgain();
}
etc...
}

最佳答案

好吧,我的 C# 有点生疏了,但是你不能使用方法重载来实现它吗? IE。定义多种方法

public GetReportLogic(Report1 someReport1, Report1 someReport2)
public GetReportLogic(Report1 someReport1, Report2 someReport2)
public GetReportLogic(Report2 someReport1, Report2 someReport2)

...

对不同的参数有不同的实现?

您还可以在报表类中定义一个名为 combine(Report r) 的方法,然后每个报表定义它与其他不同报表组合的方式。

关于c# - 如何避免大的 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17129528/

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