打印从String转换的Char Array()时出现问题

时间:2014-12-18 06:40:31

标签: c# .net arrays console.writeline

坚持这个..你能解释一下发生了什么吗?或者给我任何链接!

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

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

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

有两种可能。

1)我需要将其更改为字符串,然后才能进入打印。

或者

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

我是对的。还有更多吗?

5 个答案:

答案 0 :(得分:3)

解决方案A:

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

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

,使用for-loop,

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循环。

答案 1 :(得分:2)

对发生的事情的解释:

  • 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 :(得分:1)

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]);
}

给出了所需的输出

答案 3 :(得分:0)

char [] str = new char[20];

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

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

此处,str中的每个字符都会被连接并显示。

答案 4 :(得分:0)

到目前为止,

的答案,以及 @abatishchev 很棒解释,为什么WriteLine()打印System.Char []

我想添加一个附加的解决方案,因为在WriteLine()中使用循环看起来会令人困惑,并且不太悦耳。为了提高可读性,您可以使用new string()

在此示例中,它看起来像这样:

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

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