Можно ли использовать динамический для предоставления общего переопределения ToString для объекта - PullRequest
1 голос
/ 23 марта 2011

Я немного устал от написания методов ToString для моих классов dto. Мне пришло в голову, что может быть возможно преобразовать dto в динамический тип, а затем использовать метод агрегата linq и StringBuilder, чтобы создать стандартную строку для вывода типа записи в журнал. К сожалению, я только начинаю изучать динамические типы в C #, поэтому сейчас я немного застрял. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Следующая реализация использует метод расширения на object, а использование отражений и linq создает строку всех имен и значений свойств. Опять же, коллекции / массивы должны обрабатываться по-разному .

РЕДАКТИРОВАНИЕ КОДА Удаление всего связанного кода и сохранение только необходимого расширения.

public static string ToStringLinq(this object o)
{
    return o.GetType().FullName 
        + Environment.NewLine 
        + string.Join(Environment.NewLine, (from p in o.GetType().GetProperties()
                                            select string.Format("{0}{1}{2}", p.Name, ':', p.GetValue(o, null))));
}

Usage

 AnyClass instance = new AnyClass();
 string toString = instance.ToStringLinq();
0 голосов
/ 23 марта 2011

Если вы используете LINQ to SQL или Entity Framework, вам нужно взглянуть на SqlMetal или шаблоны EF T4 для генерации пользовательского кода;Вы можете создать свой собственный базовый класс, и все ваши объекты наследуются от этого базового класса, который имеет этот метод.

Или создайте метод расширения для расширения ваших классов, и этот метод расширения использует отражение, чтобы делать то, что вы хотите.

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...