将 ConfigurationElementCollection 中对象的属性复制到数组?

Copy properties of objects inside ConfigurationElementCollection to an array?

我创建了一个自定义配置部分,可以将尽可能多的 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>

我遵循了配置自定义配置的指南,并为我的 ConfigurationSection 创建了一个 ConfigurationElementCollection

我的最终目标:遍历 ConfigurationElementCollection(其中包含上面的 3 个 XML 节点)并将所有 Customer 属性添加到字符串数组。

我不知道该怎么做,因为即使 ConfigurationElementCollection 派生自 ICollectionIEnumerable,我也无法访问 Select()Where() 方法。

谁能提供解决方案?

如果需要我可以提供代码。一开始还以为放在这里太多了

编辑:这是我试过的两种不同的投射方式

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

错误:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'string[]'. An explicit conversion exists (Are you missing a cast?).

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

错误:

Object does not contain a definition for 'Customer' and no accessible extension method 'Customer' accepting a first argument of type 'Object' could be found.

找到答案: 我能够将 ToArray<string>() 方法添加到数组定义的末尾,并且它与 Haukinger 的代码一起工作!谢谢!

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

投射到 IEnumerable<object> 然后 Select 你需要什么

您可以直接转换 ((IEnumerable<object>)) 或使用 linq 的 Cast<object>()。大多数 linq 都适用于 IEnumerable<T> 而不是 IEnumerable.