将 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
派生自 ICollection
和 IEnumerable
,我也无法访问 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
.
我创建了一个自定义配置部分,可以将尽可能多的 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
派生自 ICollection
和 IEnumerable
,我也无法访问 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
.