我是 C# 新手,并在该程序中尝试演示程序,我的预期输出是:
Id 1 2 3 4 5 6 7 8 9
Roll # 1 2 3 4 5 6 7 8 9
这是我尝试过的:
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append("Id ");
for (int i = 0; i < 10; i++)
{
sb.Append(i+" ");
}
sb.AppendLine();
sb.Append("Roll# ");
for (int i = 0; i < 10; i++)
{
sb.Append(i + " ");
}
Console.WriteLine(sb);
}
虽然它给了我想要的输出,但在这里我必须迭代 for 循环两次。有没有什么方法可以使用 C# 的某些字符串格式,仅迭代一次就可以获得相同的输出?
最佳答案
这可以在没有显式循环的情况下完成,使用 Enumerable.Range “生成指定范围内的整数序列”,以及 string.Join()将先前创建的范围与字符串 ""
连接起来:
// using System.Linq;
string range = string.Join(" ", Enumerable.Range(1, 10)); // "1 2 3 4 5 6 7 8 9 10"
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");
<小时/>
如果您确实想使用 for
循环来构建序列,您可以构建自己的 Range
方法,例如:
public static IEnumerable<int> Range(int min, int max)
{
if (min > max)
{
throw new ArgumentException("The min value can't be greater than the max");
}
for (int i = min; i <= max; i++)
{
yield return i;
}
}
然后像以前一样加入
:
var range = string.Join(" ", Range(1, 10));
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");
<小时/>
或者构建一个数组/列表/任何集合,然后使用string.Join()
:
var arr = new int [10];
for (int i = 1; i <= 10; i++)
{
arr[i - 1] = i;
}
string range = string.Join(" ", arr);
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");
<小时/>
或者直接在循环中构建字符串:
var sbRange = new StringBuilder();
for (int i = 1; i <= 10; i++)
{
sbRange.Append($"{i} ");
}
// You can use a string and trim it (there is a space in excess at the end)
string range = sbRange.ToString().Trim();
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");
关于c# - 在c#中水平附加字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397428/