c# - 将重复的 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 += ",";
}
}
解决方案
好吧,还有另一种方法 - 使用string.Join
它正是它的作用。
当然,使用 linq 你可以让它看起来很漂亮:
string.Join(",", root.Sections.Select(SectionToJson))
string.Join
接受字符串集合,因此您可以专注于转换为字符串(对于每个元素)并让它为您进行连接。
推荐阅读
- javascript - ES6 类参数的奇怪行为
- python - 在二维 numpy 数组的每一行中查找最小非零值
- node.js - 具有多个 git 依赖项的纱线安装导致“EINVAL:无效参数,mkdir ...”错误
- android - 如何在android动态交付中执行错误代码“INCOMPATIBLE_WITH_EXISTING_SESSION”的失败状态?
- python - Pandas loc 给了我 keyerror,索引是日期
- javascript - 如何避免使用动态创建的元素多次循环 - 纯 Javascript
- kotlin - 如何在 Kotlin 的 if 语句中调用全局变量
- python - 在 numpy 数组中的多个索引上设置值
- css - Sass 错误,未找到要读取的文件或无法读取,scss 导入有问题
- php - Laravel 7 - 按 DESC 排序的分页