如何将foreach循环中的字符串一次写入一个控制台?

时间:2014-02-16 16:47:10

标签: c#

我正在研究一种从API获取一组测试的名称和ID的解决方案。找到并返回所有数据,因为我可以在Visual Studio的“输出”窗口中看到数据。

// method to get the test names and id numbers
    public List<Asset> GetTests()
    {
        var assetType = _context.MetaModel.GetAssetType("Test");
        var query = new Query(assetType);
        var nameAttribute = assetType.GetAttributeDefinition("Name");


        query.Selection.Add(nameAttribute);

        var result = _context.Services.Retrieve(query);

        result.Assets.ForEach(test =>
            LogResult(test.Oid.Token,
                GetValue(test.GetAttribute(nameAttribute).Value)));

        return result.Assets;
    }

我有两个其他方法,一个用于检查空值,另一个用于在Visual Studio中将输出显示到“输出”窗口。

    private static string GetValue(object value)
    {
        return value == null ? "No Value Available" : value.ToString();
    }

    private static void LogResult(params string[] results)
    {
        foreach (var result in results)
        {
            System.Diagnostics.Debug.Write(result);
        }
    }

当我单步执行代码时,我看到两个值(id号和测试名称)成功显示在控制台窗口中。数据在输出窗口中显示为一行。

Test:1142Sample: Login Criterion Test:1147Sample: Add Customer Details CriterionTest:1153Sample: Add Customer Header

当然,如果我写到控制台,结果都是乱七八糟的。

如何在控制台窗口中显示结果:

    Test:1142     Name: Login Criterion
    Test:11475    Name: Add Customer Details
    Test:1153     Name: Add Customer Header

基本上,输出是正确的,但我想格式化数据以在控制台窗口中整齐地显示。

我在这里看到一个例子http://www.dotnetperls.com/console-writeline,但看起来您必须知道将返回多少个值才能正确格式化显示。你会使用数组来实现这个目标吗?

static void Main()
{
string value1 = "Dot";
string value2 = "Net";
string value3 = "Perls";

Console.WriteLine("{0}, {1}, {2}", // <-- This is called a format string.
    value1,                        // <-- These are substitutions.
    value2,
    value3);
}

3 个答案:

答案 0 :(得分:5)

确保使用WriteLine而不是Write。您可以直接在ForEach委托中执行此操作,如下所示:

result.Assets.ForEach(test =>
    Console.WriteLine("Test:{0,-9}Name: {1}",
        test.Oid.Token,
        GetValue(test.GetAttribute(nameAttribute).Value)));

注意:格式字符串中的-9指定输出中该字符串的宽度。它将该参数填充最多9个空格,以便第二个字符串正确对齐。

答案 1 :(得分:4)

您可以使用此

foreach (var result in results)
{
    System.Diagnostics.Debug.Write(result + Environment.NewLine);
}

或者

foreach (var result in results)
{
    System.Diagnostics.Debug.WriteLine(result);
}

p.s.w.g答案也非常好。

答案 2 :(得分:1)

您还可以尝试使用Debug.PrintString.Format

foreach (string result in results)
{
    Debug.Print(string.Format("{0, -14} {1}", test.Oid.Token, 
                GetValue(test.GetAttribute(nameAttribute).Value)));
}