.net 你的问题我也应该解释清楚)。不过,钥匙的顺序不能保证。它们可能会随着新元素的添加或删除而更改。它如何确定对象上的哪个属性或字段将是键?KeyedCollection是一个必须继承的抽象类。幸运的是,这很容易做到。唯一需要重载的方法是GetKeyForIte

.net 你的问题我也应该解释清楚)。不过,钥匙的顺序不能保证。它们可能会随着新元素的添加或删除而更改。它如何确定对象上的哪个属性或字段将是键?KeyedCollection是一个必须继承的抽象类。幸运的是,这很容易做到。唯一需要重载的方法是GetKeyForIte,.net,collections,.net,Collections,你的问题我也应该解释清楚)。不过,钥匙的顺序不能保证。它们可能会随着新元素的添加或删除而更改。它如何确定对象上的哪个属性或字段将是键?KeyedCollection是一个必须继承的抽象类。幸运的是,这很容易做到。唯一需要重载的方法是GetKeyForItem()。这种方法就是你问题的答案。 List<List<foo>> list = new List<List<foo>>(); List<foo> firstList = list[0


你的问题我也应该解释清楚)。不过,钥匙的顺序不能保证。它们可能会随着新元素的添加或删除而更改。它如何确定对象上的哪个属性或字段将是键?
KeyedCollection
是一个必须继承的抽象类。幸运的是,这很容易做到。唯一需要重载的方法是
GetKeyForItem()
。这种方法就是你问题的答案。
List<List<foo>> list = new List<List<foo>>();
List<foo> firstList = list[0];
List<TKey>
List<TValue>

public class GenericOrderedDictionary< TKey, TValue >
    : IDictionary<TKey, TValue>
{
    private List<TKey> keys;
    private List<TValue> values;

    #region IDictionary<TKey,TValue> Members

    void IDictionary<TKey, TValue>.Add( TKey key, TValue value )
    {
        keys.Add( key );
        values.Add( value );
    }

    bool IDictionary<TKey, TValue>.ContainsKey( TKey key )
    {
        return keys.Contains( key );
    }

    ICollection<TKey> IDictionary<TKey, TValue>.Keys
    {
        get
        {
            return new List<TKey>( keys );
        }
    }

    bool IDictionary<TKey, TValue>.Remove( TKey key )
    {
        int index = keys.IndexOf( key );
        if ( index >= 0 )
        {
            keys.Remove( key );
            values.RemoveAt( index );
        }
    }

Customer[] myCustomers = getArray();
Dictionary<int, Customer> byID = myCustomers
    .ToDictionary(c => c.ID);
Dictionary<string, Customer> byName = myCustomers
    .ToDictionary(c => c.Name);
Dictionary<int, Customer> byOriginalPosition = myCustomers
    .Select( (c, i) => new {c, i})
    .ToDictionary(x => x.i, x => x.c);
  class IndexDictionary<TKey, TValue> : Dictionary<TKey, TValue>
  {
    public TValue this[int i]
    {
      get { return this[Keys.ElementAt(i)]; }
      set { this[Keys.ElementAt(i)] = value; }
    }
  }
  class OrderedDictionary<TKey, TValue> : IDictionary<TKey, TValue>
  {
    private OrderedDictionary data = new OrderedDictionary();

    public TValue this[int i]
    {
      get { return (TValue)data[i]; }
      set { data[i] = value; }
    }

    //Implement IDictionary<TKey, TValue> using the methods of the OrderedDictionary
  }
Public Class MyClass
    Public UniqueID As Guid
    Public OtherData As String
End Class
Public Class MyClassCollection
    Inherits KeyedCollection(Of Guid, MyClass)

    Public Overrides Function GetKeyForItem(ByVal item As MyClass) As Guid
        Return item.UniqueID
    End Function
End Class
Public Class bDictionary(Of TKey, TVAlue)
Implements IDictionary(Of TKey, TVAlue)

Private dictionary As New Dictionary(Of TKey, TVAlue)
Private list As List(Of TKey)

Default Public Property Item(ByVal which As TKey) As TVAlue Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).Item
    Get
        Return dictionary(which)
    End Get
    Set(ByVal value As TVAlue)
        dictionary(which) = value
    End Set
End Property

Default Public Property Item(ByVal index As Integer) As TVAlue
    Get
        Return dictionary(list(index))
    End Get
    Set(ByVal value As TVAlue)
        dictionary(list(index)) = value
    End Set
End Property

Public Sub Add(ByVal key As TKey, ByVal value As TVAlue) Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).Add
    dictionary.Add(key, value)
    list.Add(key)
End Sub

Public Sub Add(ByVal item As System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)) Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).Add
    Add(item.Key, item.Value)
End Sub

Public Sub Clear() Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).Clear
    dictionary.Clear()
    list.Clear()
End Sub

Public Function Contains(ByVal item As System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)) As Boolean Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).Contains
    If dictionary.ContainsKey(item.Key) AndAlso dictionary(item.Key).Equals(item.Value) Then
        Return True
    Else
        Return False
    End If

End Function


Public ReadOnly Property Count() As Integer Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).Count
    Get
        Return list.Count
    End Get
End Property

Public ReadOnly Property IsReadOnly() As Boolean Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).IsReadOnly
    Get
        Return False
    End Get
End Property

Public Function Remove(ByVal item As System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)) As Boolean Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).Remove
    Return Remove(item.Key)
End Function

Public Function ContainsKey(ByVal key As TKey) As Boolean Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).ContainsKey
    Return list.Contains(key)
End Function

Public ReadOnly Property Keys() As System.Collections.Generic.ICollection(Of TKey) Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).Keys
    Get
        Return dictionary.Keys
    End Get
End Property

Public Function Remove(ByVal key As TKey) As Boolean Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).Remove
    If list.Contains(key) Then
        list.Remove(key)
        dictionary.Remove(key)
        Return True
    Else
        Return False
    End If
End Function

Public Function TryGetValue(ByVal key As TKey, ByRef value As TVAlue) As Boolean Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).TryGetValue
    Return dictionary.TryGetValue(key, value)
End Function

Public ReadOnly Property Values() As System.Collections.Generic.ICollection(Of TVAlue) Implements System.Collections.Generic.IDictionary(Of TKey, TVAlue).Values
    Get
        Return dictionary.Values
    End Get
End Property


Public Sub CopyTo(ByVal array() As System.Collections.Generic.KeyValuePair(Of TKey, TVAlue), ByVal arrayIndex As Integer) Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).CopyTo

    For Each Item As TKey In dictionary.Keys
        array.SetValue(New KeyValuePair(Of TKey, TVAlue)(Item, dictionary(Item)), arrayIndex)
        arrayIndex += 1
    Next

End Sub

Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
    Return dictionary.GetEnumerator()
End Function

Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)) Implements System.Collections.Generic.IEnumerable(Of System.Collections.Generic.KeyValuePair(Of TKey, TVAlue)).GetEnumerator
    Return dictionary.GetEnumerator
End Function