【问题标题】:Issue in printing Char Array() which is converted from String打印从 String 转换而来的 Char Array() 时出现问题
【发布时间】:2014-12-18 06:40:30
【问题描述】:

对此感到困惑..您能解释一下其中发生了什么吗?或者给我任何链接!

String s1="C# Example";
Char[] s3 = s1.ToCharArray();

Console.WriteLine("S3 : {0}",s3);

我想显示转换后的字符。显示的输出是 System.Char[]。现在我需要做一些改变,但那是什么?

有两种可能。

1) 在打印之前,我需要将其更改为字符串。

或者

2) 我需要用 Char 通过定义索引来打印它,(即)s3[0];

我说的对吗?还有吗?

【问题讨论】:

  • 取决于您想要显示的内容。
  • 你不认为你需要循环遍历字符数组才能在控制台上显示它!
  • 现在我编辑了问题,就说我? @SriramSakthivel
  • 请澄清你想要做什么 - 你的帖子谈到“显示字符”,但标题说“打印字符数组()”......似乎Console.WriteLine(s1);应该给你很好的可读结果...
  • 为什么有这么多反对票???作为 SO 问题的有效问题。

标签: c# .net arrays console.writeline


【解决方案1】:

对发生的事情的解释:

  • Console.WriteLine("{0}", s3) 致电 s3.ToString()
    • 因为 WriteLine() 在每个参数上调用 ToString()
  • 方法ToString() 没有在System.Array 类型中被覆盖,所以Object.ToString() 被调用。
    • 因为 Char[] 是 System.Array 并且所有类型都继承自 Systen.Object。
  • 相当于s3.GetType().ToString(),输出System.Char[]
    • 因为这是默认实现。子类型可以覆盖它。例如,System.String 可以,StringBuilder 也可以。

【讨论】:

    【解决方案2】:

    解决方案 A:

    如果要在控制台上单独显示字符,则需要分别获取每个字符并使用循环显示。

    foreach(char ch in  s3)
    {
        Console.WriteLine("S3 : {0}", ch);
    }
    

    ,使用for循环,

    for (int i = 0; i < s3.Length; i++)
    {
        Console.WriteLine("S3 : {0}", s3[i]);
    }
    

    解决方案 B: 我更喜欢另一种方式,这可能对您没有帮助,但对于那些总是寻求更好解决方案的人来说,这也是一种选择。

    使用Extension methods

    在您的解决方案中使用扩展方法添加此类,

    public static class DisplayExtension 
    {
        public static string DisplayResult(this string input)
        {
            var resultString = "";
            foreach (char ch in input.ToCharArray())
            {
                resultString += "S3 : " + ch.ToString() + "\n";
            }
            return resultString;
        }
    }
    

    然后像这样从你的程序中调用 DisplayResult() 扩展方法,

    Console.WriteLine(s1.DisplayResult());
    

    这将为您提供相同的结果,但扩展了代码的可重用性,而无需为所有重复的情况编写 for 循环。

    【讨论】:

    • 为什么要使用 foreach 不用foreach 可以显示吗? @阿沙德
    • @Balaji,循环遍历字符数组(s3)。您也可以使用 for-loop 代替 foreach。
    • 还有do-whilewhile-dogo-to、递归...我忘了什么吗?
    【解决方案3】:
    Console.WriteLine("S3 : {0}",s3);
    

    给出结果 s3.ToString(),结果为 System.Char[]

    改为创建一个 for 循环,如:

    Console.Write("S3 :"); 
    for(int i=0; i<s3.Length; i++)
    {
        Console.Write(s3[i]);
    }
    

    提供所需的输出

    【讨论】:

      【解决方案4】:
      char [] str = new char[20];
      

      假设str是字符数组,我们需要显示它。执行以下操作(前提是您在 str using 循环中输入了一些内容):

      Console.WriteLine("The string is: {0}", string.Join("",str));
      

      这里将str中的每个字符连接起来显示出来。

      【讨论】:

        【解决方案5】:

        Good 到目前为止的回答,@abatishchev 对为什么 WriteLine() 打印 System.Char[]

        的解释很好

        我想添加一个额外的解决方案,因为在你的WriteLine() 中使用循环会看起来很混乱,而且看起来不太顺眼。为了更好的可读性,您可以使用new string()

        在这个例子中,它看起来像这样:

        String s1="C# Example";
        Char[] s3 = s1.ToCharArray();
        
        Console.WriteLine("S3 : {0}",new string(s3));
        

        【讨论】:

        • 这听起来像是显而易见的解决方案;也许在提出问题时它不可用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多