Console.Write是否会失败?

Ale*_*ley 5 .net c# console.writeline visual-studio

我正在测试我的run()函数,以确保它具有方法结束时填充的所有正确的东西.我从我们的数据库中填充了4个字段,两个字符串和两个IEnumerable(字符串).我的想法是为我从数据库中提取的所有人打印出来.

当我只打印字符串字段时,一切正常.但是,当我尝试添加Enumerables时,根本没有任何打印.我也打印一个计数器,所以我知道该程序仍在运行和工作.由于空间或其他原因,控制台是否决定不打印任何东西?

这是执行它的代码:

int i = 0;
foreach (Contact contact in Contact.LoadWithPredicate(getAll))
        {
                -------other code to populate fields---------

                i ++;
                Console.WriteLine(i);
                //Turn the Enumerables into strings for printing
                string firstEnumAsString = String.Join(", ", firstEnumerable.ToArray());
                string secondEnumAsString = String.Join(", ", secondEnumerable.ToArray());

                Console.WriteLine("Email: " + firstString+ ", correspondance: " + secondString+ ", PAM addresses: " + firstEnumAsString+ ", famousPeople: " + secondEnumAsString);
}
Run Code Online (Sandbox Code Playgroud)

所以,作为我的输出,每当我运行上面的代码时,我得到这样的输出:

1

2

Email: foo@bar.com, correspondance: John, PAM addresses: bar@foo.com, famousPeople: foo, bar, foo

3

4

etc
Run Code Online (Sandbox Code Playgroud)

问题是,总共只有两个人(~425)出现,其余的行只是数字.我不应该至少得到字符串"电子邮件"和",通信"?看起来Console似乎决定不做任何事情.而且我知道代码必须到达它,因为它在我调用Console.WriteLine()之前打印出整数.

另一方面,每当我要求打印两个字符串字段时,控制台就会显示所有425个用户的两个字段,就在它们相应的整数之后.有谁知道这里发生了什么?TIA

Chr*_*air 4

根据您的评论,我认为您的firstEnumerablesecondEnumerable对象是null。但由于您没有发布如何获取这些对象,因此我无法评论它们的原因null或如何修复它。

它们可以包含null 条目,甚至可以完全为空,但它们本身不能包含条目,否则当您调用它们时null,它会抛出一个异常。这与您看到的“值不能为空”异常消息相对应。ArgumentNullException.ToArray()

它没有崩溃和燃烧的原因是因为您正在使用try/catch代码示例中未发布的块来吞咽(并记录?)迭代循环中的异常。


我猜你的实际代码是这样的:

foreach (Contact contact in Contact.LoadWithPredicate(getAll))
{
    try
    {
        ...

        object[] firstEnumerable = null;
        object[] secondEnumerable = null;

        //some logic gates here which under some circumstances do not 
        //assign a valid instance to firstEnumerable or secondEnumerable

        ...
        Console.WriteLine(i); //this prints every time

        //Turn the Enumerables into strings for printing
        string firstEnumAsString = String.Join(", ", firstEnumerable.ToArray()); //exception here
        string secondEnumAsString = String.Join(", ", secondEnumerable.ToArray()); //or exception here

        Console.WriteLine("Email: " + firstString+ ", correspondance: " + secondString+ ", PAM addresses: " + firstEnumAsString+ ", famousPeople: " + secondEnumAsString);
        ...
    }
    catch
    {
        //maybe some logging? maybe not?
    }
}
Run Code Online (Sandbox Code Playgroud)

i这将每次打印出该值。但是,当它尝试创建firstEnumAsStringsecondEnumAsString抛出异常时,永远不会遇到您的第二个异常Console.WriteLine("Email: " + ...);,从而产生您所看到的输出。并不是说它Console.WriteLine失败了,而是你从一开始就没有调用它。