c# - 在c#中水平附加字符串

标签 c# .net

我是 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/

相关文章:

.net - 错误记录: Source Error and Source File

c# - async void 方法的用例,重新审视

c# - 从 .NET 通过电子邮件地址搜索 AD 用户的正确方法

c# - Ajax 更新面板不允许 javascript 在服务器端工作?

c# - 基于查询参数的 WCF REST 服务 url 路由

c# - 如何使用 C# 访问 iOS App 的文档文件夹

c# - 我可以在 .Net 和 WPF 中这样做吗?

c# - 通过类名或类型获取程序集或 dll C#

c# - 在进行 Jenkins 构建时如何忽略特定类别的 NUnit 测试?

c# - 有一个 "' Resource.Attribute ' does not contain a definition for 'actionBarSize' "错误