2013-05-23 2 views
2

Я работаю над упражнением, где я должен попросить пользователя строку, а затем отменить строку и распечатать ее на консоли. Я написал следующее:Почему я не могу использовать метод .ToString() для массива char в C#?

 Console.WriteLine("Please enter a string of characters: "); 
     char[] words = Console.ReadLine().ToCharArray(); 
     Console.WriteLine("You entered {0}, the reverse of which is {1}", words.ToString(), words.Reverse().ToString()); 

Какой из них не работает. По-видимому, отправка массива char в .ToString() возвращает «System.Char []», а при обратном - возвращает «System.Linq.Enumerable + d__a0`1 [System.Char]».

я узнал, что .ToString() не может обрабатывать массив символов, а вместо этого я должен был использовать новую строку конструктора, так что я переписал свой код к этому, и он работает сейчас:

 Console.WriteLine("Please enter a string of characters: "); 
     char[] words = Console.ReadLine().ToCharArray(); 
     Console.WriteLine("You entered {0}, the reverse of which is {1}", new string(words), new string(words.Reverse().ToArray())); 

Мой вопрос почему не могу использовать .ToString() в массиве символов? В сводке ToString неопределенно указано: «Возвращает строку, представляющую текущий объект», что для меня означало бы, что я получаю строку назад, которая представляет массив символов, который я отправляю. Что мне не хватает?

+0

См [этот вопрос] (http://stackoverflow.com/questions/2245581/array-tostring) – jszigeti

+3

[«Реализация метода ToString по умолчанию возвращает полное имя типа объекта»] (http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx) – Sayse

+0

много других людей, которым не понравится ваша идея репрезентации массива. –

ответ

3

Пока я не могу найти конкретные доказательства этого (пока). Я считаю, что вы не можете использовать его в массиве символов как Array types are reference types, что означает, что они содержат ссылки на фактические значения, а не на значение каждого символа. Он возвращает «System.Char []», как указано в моем комментарии; она возвращает default value for ToString

РЕДАКТИРОВАНИЕ

Это было доказательством того, что я искал https://stackoverflow.com/a/1533770/1324033

+0

Благодарим вас за ссылку «значение по умолчанию для ToString». По умолчанию метод ToString возвращает полное имя типа объекта. Теперь я вижу, что многие из встроенных типов C# переопределили поведение по умолчанию для ToString, чтобы вместо этого вернуть значение этого конкретного экземпляра объекта. Типы обычно переопределяют метод ToString для возврата строки, представляющей экземпляр объекта. Например, базовые типы, такие как Char, Int32 и String, предоставляют реализации ToString, которые возвращают строчную форму значения, которое представляет объект. – Jesse

+0

Это правильно :) надеюсь, что это поможет уточнить – Sayse

+0

Чтобы развернуть «Я считаю, что вы не можете использовать его в массиве символов, поскольку типы массива являются ссылочными типами», я не думаю, что это правда. В конце концов, сама строка является ссылочным типом, и вы можете использовать ToString для строки. – Jesse

1

Вы получаете это значение, потому что это значение по умолчанию для массива char [] и вообще объект. Если вы хотите изменить поведение .ToString() для своего случая, вы можете переопределить метод ToString() по умолчанию, используя (например) метод расширения.