Динамический Объект .NET - PullRequest
       1

Динамический Объект .NET

1 голос
/ 20 декабря 2010

У меня сейчас интересная проблема. Я знаю, что это не так красиво, но мне все равно приходится с этим справляться.

Я вызываю веб-сервис, который возвращает (массив строк) что-то подобное (по индексу)
0 - Имя таблицы («Сотрудники»)
1 - список всех возвращенных полей («Id, Name, Birthdate»)
2 - первое значение поля («1»)
3 - Значение второго поля («Бобби»)
4 - Значение третьего поля ("1970-01-01")

Я хотел бы создать имя объекта после индекса 0, в котором все строки в индексе 1 будут являться всеми свойствами, и передать им правильное значение.

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

С уважением

РЕДАКТИРОВАТЬ: У меня будет довольно много разных таблиц для извлечения данных, вот что вызывает у меня проблему.

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

Это зависит от вашего варианта использования, но я сомневаюсь, что dynamic - это путь сюда. Я бы просто имел коллекцию name-value вот так:

class Result {
    Dictionary<string, string> values = new Dictionary<string, string>();
    public string this[string name] {
        get {
            return this.values[name];
        }
        set {
            this.values[name] = value;
        }
    }

    // some details
}

Затем вы можете заполнить значения из веб-сервиса и запросить значения, сказав

Result result = PopulateResultFromWebservice();
string id = result["Id"];

и т.д.. Если вы знали типы, вы могли бы вместо этого сделать этот индексатор типа object и проанализировать значения в соответствии с их типом и сохранить их как эти типизированные объекты.

Проблема с dynamic заключается в том, что если имена полей неизвестны, как вы собираетесь писать код, который использует эти поля?

РЕДАКТИРОВАТЬ: У меня будет довольно много разных таблиц для извлечения данных, вот что вызывает у меня проблему.

Чувак, коллекция имени-ценности весь день каждый день.

0 голосов
/ 20 декабря 2010

Если вы получаете всегда разные типы объектов с непредсказуемым набором полей, то использование ExpandoObject - хорошая идея (в этом случае посмотрите библиотеку Clay ). В другом случае вам просто нужно создать несколько типов, которые отражают структуру вашего объекта, а затем материализовать их.

Очевидно, что вы можете использовать простой словарь, но использование динамического объекта может дать вам больше возможностей, вы решаете. Реальный случай использования позволит мне помочь вам лучше.

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