Array.ToString()返回System.Char [] c#

时间:2014-11-25 11:27:49

标签: c# arrays for-loop output

我正在制作一个刽子手游戏,在游戏开始时,玩家必须猜出的单词将被打印为星星。在尝试编写一次并且只是使用我无法修复的混乱代码之后,我才开始重新制作它。所以我决定再写一次。唯一的问题是,当我尝试通过使用array.ToString()来打印我的数组时;它只返回System.char []。见下文。

代码:

class Program
{
    static void Main(string[] args)
    {
        string PlayerOneWord;
        string PlayerTwoGuess;
        int lives = 5;

        Console.WriteLine("Welcome to hangman!\n PLayer one, Please enter the word which player Two needs to guess!");
        PlayerOneWord = Console.ReadLine().ToLower();

        var stars = new char[PlayerOneWord.Length];
        for (int i = 0; i < stars.Length ; i++)
        {
                stars[i] = '*';
        }

        string StarString = stars.ToString();

        Console.Write("Word to Guess: {0}" , StarString);

        Console.ReadLine();
    }
}

输出:

Output

输出应该说Word to guess: Hello

请有人解释为什么会这样,因为这不是我第一次遇到这个问题。

4 个答案:

答案 0 :(得分:8)

在简单数组上调用ToString只返回"T[]",无论类型T是什么。它对char[]没有任何特殊处理。

要将char[]转换为string,您可以使用:

string s = new string(charArray);

但是对于你的具体问题,有一个更简单的解决方案:

string stars = new string('*', PlayerOneWord.Length);

构造函数public String(char c, int count)重复c count次。

答案 1 :(得分:2)

变量stars是一个字符数组。这就是您收到此错误的原因。正如MSDN

中所述
  

返回表示当前对象的字符串。

为了从这个数组中的字符中获取一个字符串,你可以使用它:

 Console.Write("Word to Guess: {0}" , new String(stars));

答案 2 :(得分:2)

执行此操作的正确方法是:

string StarString = new string(stars);

ToString()调用Array-class的ToString方法的标准实现,对于所有Arrays都是相同的,并且类似于object只返回完全限定的类名。

答案 3 :(得分:0)

尝试以下代码:

static string ConvertCharArr2Str(char[] chs)
{
    var s = "";
    foreach (var c in chs)
    {
        s += c;
    }
    return s;
}