Imports System.Collections.ObjectModel Public Class PluginsCollection Implements IList(Of IPlugin) Dim _list As New List(Of IPlugin) Dim _dict As New Dictionary(Of String, IPlugin) Public Sub Add(item As IPlugin) Implements ICollection(Of IPlugin).Add _list.Add(item) End Sub Public Sub Add(item As IPlugin, key As String) _list.Add(item) _dict.Add(key, item) End Sub Public Sub Clear() Implements ICollection(Of IPlugin).Clear _list.Clear() _dict.Clear() End Sub Public Function Contains(item As IPlugin) As Boolean Implements ICollection(Of IPlugin).Contains Return _list.Contains(item) End Function Public Function ContainsKey(key As String) As Boolean Return _dict.ContainsKey(key) End Function Public ReadOnly Property Count As Integer Implements ICollection(Of IPlugin).Count Get Return _list.Count End Get End Property Public Function Remove(item As IPlugin) As Boolean Implements ICollection(Of IPlugin).Remove Try _list.Remove(item) If _dict.ContainsValue(item) Then _dict.Remove(_dict.FirstOrDefault(Function(x) x.Value Is item).Key) End If Return True Catch ex As Exception Return False End Try End Function Public Function Remove(key As String) Try Dim j = _dict.Item(key) _list.Remove(j) _dict.Remove(key) Return True Catch ex As Exception Return False End Try End Function Public Function GetEnumerator() As IEnumerator(Of IPlugin) Implements IEnumerable(Of IPlugin).GetEnumerator Return _list.GetEnumerator End Function Default Public Property Item(index As Integer) As IPlugin Implements IList(Of IPlugin).Item Get Try Return _list(index) Catch ex As Exception Return Nothing End Try End Get Set(value As IPlugin) ' do nothing End Set End Property Default Public Property Item(key As String) As IPlugin Get If _dict.ContainsKey(key) Then Return _dict(key) Else Return Nothing End If End Get Set(value As IPlugin) ' do nothing End Set End Property #Region "Unused code" Private Sub RemoveAt(index As Integer) Implements IList(Of IPlugin).RemoveAt '_list.RemoveAt(index) End Sub Private Sub CopyTo(array() As IPlugin, arrayIndex As Integer) Implements ICollection(Of IPlugin).CopyTo ' End Sub Private Function IndexOf(item As IPlugin) As Integer Implements IList(Of IPlugin).IndexOf Return _list.IndexOf(item) End Function Private Sub Insert(index As Integer, item As IPlugin) Implements IList(Of IPlugin).Insert ' End Sub Private Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator Return MyClass.GetEnumerator End Function Private ReadOnly Property IsReadOnly As Boolean Implements ICollection(Of IPlugin).IsReadOnly Get Return False End Get End Property #End Region End Class