Почему метод С# List<>
ToString
не предоставляет разумное строковое представление, которое печатает его содержимое? Я получаю имя класса (которое я предполагаю, это реализация по умолчанию object.ToString
), когда я пытаюсь напечатать объект List<>
. Почему это так?
Вопрос о С# `List <>. ToString`
Ответ 1
Простой ответ: так, как есть, я боюсь.
Аналогично List<T>
не переопределяет GetHashCode
или Equals
. Обратите внимание, что это было бы очень мало для форматирования, кроме как вызвать простой ToString
, возможно, разделяя запятую значения.
Вы всегда можете написать свой собственный метод расширения для выполнения соответствующего форматирования, если хотите, или использовать более новые перегрузки string.Join
, которые делают его довольно простым:
string text = string.Join(",", list);
Ответ 2
Я думаю, причина в том, что непонятно, что это должно делать.
Может быть, ToString может быть на всевозможном элементе и отделить их от комы? Но что, если кто-то хочет с запятой? Или тире? Или кто-то хочет заключить целую цепочку в фигурные или нормальные браглатки? Или кто-то хочет использовать разные функции для получения текстового представления одного элемента?
Мало что нужно отметить: ToString следует использовать только для отладки пурпусов. Если вы хотите экспортировать свои данные в строку, переопределите это поведение в своем классе или создайте для него класс утилиты.
Также List предназначен для хранения элементов, а не для их текстового представления.
Ответ 3
Потому что это, вероятно, не так просто реализовать.
A List<>
может содержать много материала. Например, еще один List<>
, содержащий Dictionary<>
, который содержит сложные объекты...