Преобразовать из пользовательского списка в список строк - PullRequest
2 голосов
/ 25 марта 2010

Привет всем, у меня есть следующий код:

    Public Shared Function ConvertToString(ByVal list As IList) As String
        Dim strBuilder = New System.Text.StringBuilder()
        Dim item As Object
        For Each item In list
            strBuilder.Append(obj.ToString())
            strBuilder.Append(",")
        Next
        Return strBuilder.ToString(strBuilder.Length - 1)
    End Function

Цель состоит в том, чтобы преобразовать список пользовательских объектов в список строк, содержащий каждый элемент в списке. К сожалению, я не могу найти способ получить базовые данные пользовательского объекта и, конечно, как в приведенном выше примере, использование объекта просто дает мне строку определений типов, а не доступ к базовым данным. Любая помощь высоко ценится.

Paul.

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

Нет строкового представления по умолчанию «базовых данных» в объекте. Все зависит от того, что вы хотите увидеть. Например, у вас есть класс Person, и у него есть свойства FirstName и LastName. У вас есть экземпляр, где FirstName = "John" и LastName = "Smith". Каково будет представление по умолчанию базовых данных? "Джон Смит"? "Смит, Джон"? Что-то еще?

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

Так что я не думаю, что вы можете заставить свой метод работать для произвольных классов. Если у вас есть определенный небольшой набор классов, для которых вы хотите, чтобы это работало, вы можете переопределить ToString, поскольку Пол Сасик предлагает предоставить для них полезное строковое представление. Или, если у вас нет доступа к коду для этих классов, вы можете добавить метод расширения для всех них, GetUnderlyingData или что-то в этом роде, и вызвать этот метод расширения вместо ToString.

0 голосов
/ 25 марта 2010

Если у вас есть контроль над пользовательским объектом, вы можете переопределить функцию ToString, чтобы вернуть тип строковых данных, которые вы хотите видеть.

I can't seem to find a way to get the underlying data of the custom object,

Как получилось? Что вы пробовали? Вы должны быть в состоянии привести к типу или получить его отражением. Может быть, вы можете показать нам немного больше кода?

...