打印从字符串转换的字符数组()时出现问题

本文关键字:问题 数组 字符串 转换 字符 打印 | 更新日期: 2023-09-27 18:34:37

被这个困住了..你能解释一下里面发生了什么吗?或者给我任何链接!

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

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

这可以通过两种方式实现。

1(我需要将其更改为字符串,然后再打印。

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

我说的对吗。还有什么事吗?

打印从字符串转换的字符数组()时出现问题

对发生情况的解释:

  • 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也是如此。

解决方案 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 :我更喜欢一种方式,这可能对您没有帮助,但对于那些总是寻找更好解决方案的人来说,它也是一种选择。

使用扩展方法

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

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

到目前为止的

答案很好@abatishchevWriteLine()打印系统的原因进行了很好的解释[]

我想添加一个额外的解决方案,因为在WriteLine()中使用循环看起来会令人困惑,而且不太赏心悦目。为了获得更好的可读性,您可以使用new string()

在此示例中,它如下所示:

String s1="C# Example";
Char[] s3 = s1.ToCharArray();
Console.WriteLine("S3 : {0}",new string(s3));
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]);
}

提供所需的输出

char [] str = new char[20];

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

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

在这里,str 中的每个字符都连接并显示。