首页 > 解决方案 > 将重复的 for 循环功能提取到自己的方法中

问题描述

在我的一个课程中,我有许多方法,它们都有相似的目的;这些方法将不同的对象转换为有效的 JSON 表示。每种方法做的事情都略有不同,因为输入到方法中的对象不同,因此它们的 JSON 输出也会略有不同。

在这些方法中存在一个 for 循环,该循环的目的是检查被转换为 JSON 的字段是否是对象中的最后一个,如果不是,则将 a,放置在转换后的 JSON 字符串之后,原样在 JSON 中是正常的。

下面是其中一个 for 循环的示例:

         for (int i = 0; i < numberOfSections; i++)
            {
                if (i == numberOfSections - 1)
                {
                     output += SectionToJson(root.Sections[i]);
                }
                else
                {
                    output += SectionToJson(root.Sections[i]);
                    output += ",";
                }
            }

这里要注意的一点是,对方法的调用(SectionToJson这里)在每个方法中是不同的。因此,我有三个不同的 for 循环做几乎相同的事情,但在它们的子句中使用不同的方法调用。

我想知道是否有一种方法可以从我的三种不同方法中删除这些丑陋的 for 循环,而是将它们的功能放在一个方法中,然后可以从这三种方法中调用该方法。但是,由于每个方法的内部方法调用不同,因此很难将其放置在单个方法中。

我考虑使用 Func 委托将所需的方法作为参数传递给新方法,但这不起作用,因为三个内部方法的参数都不同,因此我需要对单个方法进行三个不同的覆盖。这有点破坏了首先删除 for 循环的意义。

有没有其他我没有考虑过的方法可以帮助我在这里实现目标?我也试图减少我的参数列表,并且不想在新方法中超过三个参数。最好是两个。

其他两个有问题的 for 循环如下。

for (int i = 0; i < numberOfQuestionsInBank; i++)
            {
                if (i == numberOfQuestionsInBank - 1)
                {
                    output += QuestionPropertyToJson(questionBank.Properties[i]);
                }
                else
                {
                    output += QuestionPropertyToJson(questionBank.Properties[i]);
                    output += ",";
                }

            }

for (int i = 0; i < numberOfSections; i++)
            {
                if (i == numberOfSections - 1)
                {
                    requiredSections += "\"" + (i+1) + "\"";
                }
                else
                {
                    requiredSections += "\"" + (i+1) + "\"";
                    requiredSections += ",";
                }


            }

标签: c#

解决方案


好吧,还有另一种方法 - 使用string.Join它正是它的作用。

当然,使用 linq 你可以让它看起来很漂亮:

string.Join(",", root.Sections.Select(SectionToJson))

string.Join接受字符串集合,因此您可以专注于转换为字符串(对于每个元素)并让它为您进行连接。


推荐阅读