app.configにConfigurationSectionがあり、httpエンドポイント(〜50)のリストが含まれています。それぞれにオプションの優先度(およびデフォルト)があります。
このリストを順番に表示したいと思います。
Dim Config As MyConfigSection = DirectCast(System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None).Sections("MySection"), MyConfigSection)
Dim Endpoints = MyConfigSection.InitialEndpoints
この場合、継承InitialEndpoints
するタイプであり、大まかにタイプされた単なるうなずきコレクションです。Endpointcollection
ConfigurationElementCollection
エンドポイントコレクションは、、などを含むsを処理しEndpointDefinition
ます。Url
Priority
できるようになりたい...
For Each E in Endpoints.OrderBy(function(x) x.Priority)
...
Next
本当に新しいリスト/コレクションを作成してオブジェクトを転送し、キャストする必要がありますか?
コレクションを不正行為してキャストすると、IEnumerable
キャストが無効になりました(まったく予期しないことではありません)
別の考えは、次のようなことをすることでした...
Endpoints.Select(function(x) DirectCast(x, Endpointdefinition)).OrderBy(...)
ただしEndpointCollection
、これはリストではないため、LINQSelect()
拡張機能のメリットはありません。いつでも実装できIList
ましたが、今ではハンマーを使ってナットを割っているような気がします。
誰かがこれを行うための明白な方法を指摘できますか?参考までに、私のEndpointCollectionは以下のとおりです
<ConfigurationCollection(GetType(EndpointDefinition), AddItemName:="Endpoint")>
Public Class EndpointCollection
Inherits ConfigurationElementCollection
Protected Overloads Overrides Function CreateNewElement() As ConfigurationElement
Return New EndpointDefinition
End Function
Protected Overrides Function CreateNewElement(elementName As String) As ConfigurationElement
Return New EndpointDefinition With {.Url = elementName}
End Function
Protected Overrides Function GetElementKey(element As ConfigurationElement) As Object
Return DirectCast(element, EndpointDefinition).Url
End Function
Public Overrides ReadOnly Property CollectionType As ConfigurationElementCollectionType
Get
Return ConfigurationElementCollectionType.AddRemoveClearMap
End Get
End Property
Public Shadows Property Item(index As Integer) As EndpointDefinition
Get
Return CType(BaseGet(index), EndpointDefinition)
End Get
Set(value As EndpointDefinition)
If Not (BaseGet(index) Is Nothing) Then
BaseRemoveAt(index)
End If
BaseAdd(index, value)
End Set
End Property
End Class