2013-11-14 2 views
0

Я пытаюсь скомпилировать программу c3, но я продолжаю получать ошибку ниже.C# компиляция ошибка преобразования char [] в строку []

Ошибка CS1502: Наилучшее перегруженное соответствие метода для string.Join(string, string[]) имеет некоторые недопустимые аргументы. CS1503

Ошибки: Аргумент #2 не может преобразовать char[] выражения типа string[]

for (int row = 0; row < 3; row++) 
{ 
    char[] arr = new char[3]; 
    for (int col = 0; col < 3; col++) 
    { 
     if (board[row, col] == Player.None) 
     { 
      arr[col] = ' '; 
     } 
     else 
     { 
      arr[col] = board[row, col] == Player.P1 ? 'X' : 'O'; 
     } 
    } 

    Console.WriteLine("| {0} |", string.Join(" | ", arr)); 
+1

Ну все в сообщении: вы» re создает массив символов, в то время как ваш метод ожидает массив строк ... –

+0

Дубликат [Как преобразовать массив символов в массив строк?] (http://stackoverflow.com/questions/7936235/). – CodeCaster

ответ

0

Как ваш arr имеет типа char[], вы можете использовать String(char[]) конструктор для создания экземпляра string объекта

var strData= new string[]{new string(arr)}; 
Console.WriteLine("| {0} |", (string.Join(" | ", strData)); 
+1

Это вернет '| Foo | ', когда ввод' {'F', 'o', 'o'} ', я подозреваю, что OP хочет' | F | o | o | 'в этом случае. – CodeCaster

+0

@RuneFS: Несмотря на то, что я оставил свой комментарий, я только что проверил, и он примет строку штрафа. Несмотря на то, что я не смотрел документы в эту секунду, я думаю, что у него есть парамс [] перегрузка (или аналогичная), что означает, что одна строка в порядке (если это немного бессмысленно). – Chris

3

Ответ очень прост, arr - char[], а не string[].

попробовать это

Console.WriteLine("| {0} |", string.Join(" | ", arr.Select(a => a.ToString()))); 
2

Вы можете либо итерацию по char с (as suggested by others) массива или вы можете изменить тип массива

for (int row = 0; row < 3; row++) 
{ 
    var arr = new string[3]; 
    for (int col = 0; col < 3; col++) 
    { 
     if (board[row, col] == Player.None) 
     { 
      arr[col] = " "; 
     } 
     else 
     { 
      arr[col] = board[row, col] == Player.P1 ? "X" : "O"; 
     } 
    } 

    Console.WriteLine("| {0} |", string.Join(" | ", arr)); 
} 
+0

На самом деле это, пожалуй, лучшее решение - в первую очередь, используя правильный тип массива. Хорошо сделано, глядя на проблему полностью, вместо того, чтобы просто фиксировать линию ошибок (это то, что я сделал в своей голове, прежде чем другие отвечали на то, что я намеревался). – Chris

Смежные вопросы