Скопировать свойства объектов внутри ConfigurationElementCollection в массив? - PullRequest
0 голосов
/ 28 сентября 2018

Я создал пользовательский раздел конфигурации и могу добавить столько строк XML в свой пользовательский раздел, просмотреть и распечатать их все.Это отлично работает.

<eTMSoftware>
    <Program Id="1" Customer="SomeCust" Type="DC" InstalledLocation="C:\Program Files (x86)\eMenuDesktopComponent 1.1.1.1_Customer" LogBaseDestination="C:\_eTM Logging"/>
    <Program Id="2" Customer="ThisCustNew" Type="DC" InstalledLocation="Some_Path" LogBaseDestination="DEST"/>
    <Program Id="3" Customer="AnotherNewCust" Type="DC" InstalledLocation="Some_Another_Path" LogBaseDestination="DEST"/>
</eTMSoftware>

Я следовал руководству по настройке пользовательской конфигурации и создал ConfigurationElementCollection для своего ConfigurationSection.

Моя КОНЕЦНАЯ ЦЕЛЬ : Выполните цикл по ConfigurationElementCollection (которая содержит 3 узла XML выше) и добавьте все атрибуты "Customer" в строковый массив.

Я не могу понять, как это сделать, потому что, хотя ConfigurationElementCollection наследуется от ICollection и IEnumberable, у меня нет доступа к методам Select () или Where ().Кто-нибудь может предложить решение?

Я могу предоставить код, если это необходимо.Я думал, что сначала было бы слишком много.

Редактировать: вот два разных способа, которыми я пробовал кастовать

public void VerifyShareDestinationsPerCustomer(eTMProgamsElementCollection configuredItems)
{
     string[] customersFromConfig = configuredItems.Cast<eTMProgramElement>().Select(p => p.Customer);
}

Текст ошибки:

Не удалось неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'string []'.Существует явное преобразование (Вы пропустили приведение?).

public void VerifyShareDestinationsPerCustomer(eTMProgamsElementCollection configuredItems)
{
     string[] customersFromConfig = configuredItems.Cast<object>().Select(p => p.Customer);
}

Текст ошибки:

Объект не содержит определения «Клиент» и недоступенМожно найти метод расширения «Клиент», принимающий первый аргумент типа «Объект».

ОТВЕТ НАЙДЕН: Мне удалось добавить ToArray ()метод до конца определения массива, и он работал с кодом из Haukinger!Спасибо!

string[] customersFromConfig = configuredItems.Cast<eTMProgramElement>().Select(p => p.Customer).ToArray<string>();

1 Ответ

0 голосов
/ 28 сентября 2018

Приведите к IEnumerable<object>, затем Select, что вам нужно

. Вы можете либо напрямую разыграть ((IEnumerable<object>)), либо использовать linq's Cast<object>().Большая часть linq работает на IEnumerable<T>, а не IEnumerable.

...