【问题标题】:C# - Console.WriteLine() does not showing the second ParameterC# - Console.WriteLine() 不显示第二个参数
【发布时间】:2016-02-18 22:15:32
【问题描述】:

在处理 C# Basic 数据类型时,当我使用不同的方法创建 2 个 bool 变量并尝试使用 Console.WriteLine() 方法显示它们时,显示了第一个变量,但没有显示第二个变量。 我知道通过在变量之间使用 + 符号或在 Console.WriteLine 中使用占位符语法来获得所需输出的替代方法,但我只想知道原因,为什么第二个参数没有显示?如果有人知道原因,请回答。

这是我正在处理的代码。

        bool b1 = true;
        System.Boolean b2 = new System.Boolean();
        b2 = false;
        Console.WriteLine( b1.ToString() , b2.ToString() );

【问题讨论】:

  • 您查看过Console.WriteLine 的文档吗?您调用的重载并没有按照您的想法执行。

标签: c# .net console


【解决方案1】:

Console.WriteLine 作为String.Format

  • 第一个参数:格式字符串。
  • 第 2 到第 n:要使用的参数 格式化字符串。

这是你需要做的:

Console.WriteLine("{0} {1}", b1, b2);

【讨论】:

  • 添加到这一点 - 值得您关注Composite Formatting
  • 是否有格式字符串,可以打印所有参数?
【解决方案2】:

检查在这个 .net 框架和替代方案中编写重载函数的方法是:

Console.WriteLine(b1); Console.WriteLine(b2);

【讨论】:

    【解决方案3】:

    您调用的重载旨在将格式字符串作为第一个参数,将要在格式字符串中使用的对象作为第二个参数。 https://msdn.microsoft.com/en-us/library/586y06yf(v=vs.110).aspx

    你应该做的是调用 Console.WriteLine 两次:

    Console.WriteLine(b1);
    Console.WriteLine(b2);
    

    【讨论】:

      【解决方案4】:

      这是来自 Console 的官方文档。我想你以为参数是(字符串,字符串),但实际上是(字符串,对象)。

              // Summary:
              //     Writes the text representation of the specified object, followed by the current
              //     line terminator, to the standard output stream using the specified format
              //     information.
              //
              // Parameters:
              //   format:
              //     A composite format string (see Remarks).
              //
              //   arg0:
              //     An object to write using format.
              //
              // Exceptions:
              //   System.IO.IOException:
              //     An I/O error occurred.
              //
              //   System.ArgumentNullException:
              //     format is null.
              //
              //   System.FormatException:
              //     The format specification in format is invalid.
              public static void WriteLine(string format, object arg0);
      

      【讨论】:

      • 这是一个隐蔽的 RTFM 吗?
      • 没有。只是指出铸造是如何在这里工作的。 OP 提供了一个 (string, string) ,它被转换为 (string, object)。 WriteLine 函数不会将字符串连接在一起并打印它们。但是...有时手册确实说得最好。
      【解决方案5】:

      这就是您尝试在您的程序中执行的操作:
      Console.WriteLine(b1.ToString(),b2.ToString());

      第一个参数接受格式,第二个参数接受要显示的对象,在您的情况下,您提供要显示的对象,但在您的第一个(格式)参数中,您没有指定显示的位置,它正在获取您的对象但无法在控制台中显示它,因为你没有指定那个东西,在 C# 中你可以用几种不同的方式指定它

      Console.WriteLine(b1.ToString()+ " {0}", b2.ToString());
      Console.WriteLine($"{b1.ToString()} {b2.ToString()}"); 
      Console.WriteLine(b1.ToString() + " " + b2.ToString());
      

      【讨论】:

      • 无意冒犯——你基本上是在用这些实现把一个方形钉子放在一个圆孔里;尽管在技术上有效,但它完全破坏了重载背后的整个方法。话虽如此,它们是有效的方法;尽管极不可能用于现实世界的场景 - 节省了一些我现在无法想到的扭曲要求。
      • 仅供参考:使用复合格式时,您无需显式调用ToString();这是暗示的。此外,第一个只是一个非常糟糕的想法,绝对不是一个习惯。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多