gpt4 book ai didi

c# - 将重复的 for 循环功能提取到自己的方法中

转载 作者:行者123 更新时间:2023-11-30 22:58:02 26 4
gpt4 key购买 nike

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

在这些方法中存在一个for循环,这个循环的目的是检查被转换成JSON的字段是否是对象中的最后一个,如果不是则一个,将放在转换后的 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 委托(delegate)将所需的方法作为参数传递给新方法,但这行不通,因为三个内部方法的参数都不同,因此我需要三个不同的重写单一的方法。这有点违背了首先删除 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 += ",";
}


}

最佳答案

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

当然,使用 linq 可以使它看起来非常漂亮:

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

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

关于c# - 将重复的 for 循环功能提取到自己的方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53259004/

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