Подтвердить что ты не робот

Вопрос о С# `List <>. ToString`

Почему метод С# List<> ToString не предоставляет разумное строковое представление, которое печатает его содержимое? Я получаю имя класса (которое я предполагаю, это реализация по умолчанию object.ToString), когда я пытаюсь напечатать объект List<>. Почему это так?

4b9b3361

Ответ 1

Простой ответ: так, как есть, я боюсь.

Аналогично List<T> не переопределяет GetHashCode или Equals. Обратите внимание, что это было бы очень мало для форматирования, кроме как вызвать простой ToString, возможно, разделяя запятую значения.

Вы всегда можете написать свой собственный метод расширения для выполнения соответствующего форматирования, если хотите, или использовать более новые перегрузки string.Join, которые делают его довольно простым:

string text = string.Join(",", list);

Ответ 2

Я думаю, причина в том, что непонятно, что это должно делать.

Может быть, ToString может быть на всевозможном элементе и отделить их от комы? Но что, если кто-то хочет с запятой? Или тире? Или кто-то хочет заключить целую цепочку в фигурные или нормальные браглатки? Или кто-то хочет использовать разные функции для получения текстового представления одного элемента?

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

Также List предназначен для хранения элементов, а не для их текстового представления.

Ответ 3

Потому что это, вероятно, не так просто реализовать.

A List<> может содержать много материала. Например, еще один List<>, содержащий Dictionary<>, который содержит сложные объекты...