KeyedCollection<TKey,TItem> Clase

Definición

Proporciona la clase base abstracta para una colección en la que sus claves están incrustadas en los valores.

generic <typename TKey, typename TItem>
public ref class KeyedCollection abstract : System::Collections::ObjectModel::Collection<TItem>
public abstract class KeyedCollection<TKey,TItem> : System.Collections.ObjectModel.Collection<TItem>
[System.Runtime.InteropServices.ComVisible(false)]
[System.Serializable]
public abstract class KeyedCollection<TKey,TItem> : System.Collections.ObjectModel.Collection<TItem>
type KeyedCollection<'Key, 'Item> = class
    inherit Collection<'Item>
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Serializable>]
type KeyedCollection<'Key, 'Item> = class
    inherit Collection<'Item>
Public MustInherit Class KeyedCollection(Of TKey, TItem)
Inherits Collection(Of TItem)

Parámetros de tipo

TKey

Tipo de claves de la colección.

TItem

Tipo de elementos de la colección.

Herencia
Collection<TItem>
KeyedCollection<TKey,TItem>
Derivado
Atributos

Ejemplos

Esta sección contiene dos ejemplos de código. En el primer ejemplo se muestra el código mínimo necesario para derivar de KeyedCollection<TKey,TItem>y se muestran muchos de los métodos heredados. En el segundo ejemplo se muestra cómo invalidar los métodos protegidos de KeyedCollection<TKey,TItem> para proporcionar un comportamiento personalizado.

Ejemplo 1

En este ejemplo de código se muestra el código mínimo necesario para derivar una clase de colección de KeyedCollection<TKey,TItem>: invalidar el GetKeyForItem método y proporcionar un constructor público que delega en un constructor de clase base. En el ejemplo de código también se muestran muchas de las propiedades y los métodos heredados de KeyedCollection<TKey,TItem> las clases y Collection<T> .

La SimpleOrder clase es una lista de solicitudes muy sencilla que contiene OrderItem objetos, cada uno de los cuales representa un elemento de línea en el orden. La clave de OrderItem es inmutable, una consideración importante para las clases que derivan de KeyedCollection<TKey,TItem>. Para obtener un ejemplo de código que usa claves mutables, vea ChangeItemKey.

using namespace System;
using namespace System::Collections::Generic;
using namespace System::Collections::ObjectModel;

// This class represents a simple line item in an order. All the 
// values are immutable except quantity.
// 
public ref class OrderItem
{
private:
    int _quantity;
    
public:
    initonly int PartNumber;
    initonly String^ Description;
    initonly double UnitPrice;
    
    OrderItem(int partNumber, String^ description, 
        int quantity, double unitPrice)
    {
        this->PartNumber = partNumber;
        this->Description = description;
        this->Quantity = quantity;
        this->UnitPrice = unitPrice;
    } 
    
    property int Quantity    
    {
        int get() { return _quantity; }
        void set(int value)
        {
            if (value < 0)
                throw gcnew ArgumentException("Quantity cannot be negative.");
            
            _quantity = value;
        }
    }
        
    virtual String^ ToString() override 
    {
        return String::Format(
            "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}", 
            PartNumber, _quantity, Description, UnitPrice, 
            UnitPrice * _quantity);
    }
};

// This class represents a very simple keyed list of OrderItems,
// inheriting most of its behavior from the KeyedCollection and 
// Collection classes. The immediate base class is the constructed
// type KeyedCollection<int, OrderItem>. When you inherit
// from KeyedCollection, the second generic type argument is the 
// type that you want to store in the collection -- in this case
// OrderItem. The first type argument is the type that you want
// to use as a key. Its values must be calculated from OrderItem; 
// in this case it is the int field PartNumber, so SimpleOrder
// inherits KeyedCollection<int, OrderItem>.
//
public ref class SimpleOrder : KeyedCollection<int, OrderItem^>
{
    // The parameterless constructor of the base class creates a 
    // KeyedCollection with an internal dictionary. For this code 
    // example, no other constructors are exposed.
    //
public:
    SimpleOrder() {}
    
    // This is the only method that absolutely must be overridden,
    // because without it the KeyedCollection cannot extract the
    // keys from the items. The input parameter type is the 
    // second generic type argument, in this case OrderItem, and 
    // the return value type is the first generic type argument,
    // in this case int.
    //
protected:
    virtual int GetKeyForItem(OrderItem^ item) override 
    {
        // In this example, the key is the part number.
        return item->PartNumber;
    }
};

public ref class Demo
{    
public:
    static void Main()
    {
        SimpleOrder^ weekly = gcnew SimpleOrder();

        // The Add method, inherited from Collection, takes OrderItem.
        //
        weekly->Add(gcnew OrderItem(110072674, "Widget", 400, 45.17));
        weekly->Add(gcnew OrderItem(110072675, "Sprocket", 27, 5.3));
        weekly->Add(gcnew OrderItem(101030411, "Motor", 10, 237.5));
        weekly->Add(gcnew OrderItem(110072684, "Gear", 175, 5.17));
        
        Display(weekly);
    
        // The Contains method of KeyedCollection takes the key, 
        // type, in this case int.
        //
        Console::WriteLine("\nContains(101030411): {0}", 
            weekly->Contains(101030411));

        // The default Item property of KeyedCollection takes a key.
        //
        Console::WriteLine("\nweekly(101030411)->Description: {0}", 
            weekly[101030411]->Description);

        // The Remove method of KeyedCollection takes a key.
        //
        Console::WriteLine("\nRemove(101030411)");
        weekly->Remove(101030411);
        Display(weekly);

        // The Insert method, inherited from Collection, takes an 
        // index and an OrderItem.
        //
        Console::WriteLine("\nInsert(2, New OrderItem(...))");
        weekly->Insert(2, gcnew OrderItem(111033401, "Nut", 10, .5));
        Display(weekly);

        // The default Item property is overloaded. One overload comes
        // from KeyedCollection<int, OrderItem>; that overload
        // is read-only, and takes Integer because it retrieves by key. 
        // The other overload comes from Collection<OrderItem>, the 
        // base class of KeyedCollection<int, OrderItem>; it 
        // retrieves by index, so it also takes an Integer. The compiler
        // uses the most-derived overload, from KeyedCollection, so the
        // only way to access SimpleOrder by index is to cast it to
        // Collection<OrderItem>. Otherwise the index is interpreted
        // as a key, and KeyNotFoundException is thrown.
        //
        Collection<OrderItem^>^ coweekly = weekly;
        Console::WriteLine("\ncoweekly[2].Description: {0}", 
            coweekly[2]->Description);
 
        Console::WriteLine("\ncoweekly[2] = gcnew OrderItem(...)");
        coweekly[2] = gcnew OrderItem(127700026, "Crank", 27, 5.98);

        OrderItem^ temp = coweekly[2];

        // The IndexOf method inherited from Collection<OrderItem> 
        // takes an OrderItem instead of a key
        // 
        Console::WriteLine("\nIndexOf(temp): {0}", weekly->IndexOf(temp));

        // The inherited Remove method also takes an OrderItem.
        //
        Console::WriteLine("\nRemove(temp)");
        weekly->Remove(temp);
        Display(weekly);

        Console::WriteLine("\nRemoveAt(0)");
        weekly->RemoveAt(0);
        Display(weekly);

    }
    
private:
    static void Display(SimpleOrder^ order)
    {
        Console::WriteLine();
        for each( OrderItem^ item in order )
        {
            Console::WriteLine(item);
        }
    }
};

void main()
{
    Demo::Main();
}

/* This code example produces the following output:

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
101030411     10 Motor        at   237.50 =   2,375.00
110072684    175 Gear         at     5.17 =     904.75

Contains(101030411): True

weekly(101030411)->Description: Motor

Remove(101030411)

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
110072684    175 Gear         at     5.17 =     904.75

Insert(2, New OrderItem(...))

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
111033401     10 Nut          at      .50 =       5.00
110072684    175 Gear         at     5.17 =     904.75

coweekly(2)->Description: Nut

coweekly[2] = gcnew OrderItem(...)

IndexOf(temp): 2

Remove(temp)

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
110072684    175 Gear         at     5.17 =     904.75

RemoveAt(0)

110072675     27 Sprocket     at     5.30 =     143.10
110072684    175 Gear         at     5.17 =     904.75
 */
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

// This class represents a very simple keyed list of OrderItems,
// inheriting most of its behavior from the KeyedCollection and
// Collection classes. The immediate base class is the constructed
// type KeyedCollection<int, OrderItem>. When you inherit
// from KeyedCollection, the second generic type argument is the
// type that you want to store in the collection -- in this case
// OrderItem. The first type argument is the type that you want
// to use as a key. Its values must be calculated from OrderItem;
// in this case it is the int field PartNumber, so SimpleOrder
// inherits KeyedCollection<int, OrderItem>.
//
public class SimpleOrder : KeyedCollection<int, OrderItem>
{

    // This is the only method that absolutely must be overridden,
    // because without it the KeyedCollection cannot extract the
    // keys from the items. The input parameter type is the
    // second generic type argument, in this case OrderItem, and
    // the return value type is the first generic type argument,
    // in this case int.
    //
    protected override int GetKeyForItem(OrderItem item)
    {
        // In this example, the key is the part number.
        return item.PartNumber;
    }
}

public class Demo
{
    public static void Main()
    {
        SimpleOrder weekly = new SimpleOrder();

        // The Add method, inherited from Collection, takes OrderItem.
        //
        weekly.Add(new OrderItem(110072674, "Widget", 400, 45.17));
        weekly.Add(new OrderItem(110072675, "Sprocket", 27, 5.3));
        weekly.Add(new OrderItem(101030411, "Motor", 10, 237.5));
        weekly.Add(new OrderItem(110072684, "Gear", 175, 5.17));

        Display(weekly);

        // The Contains method of KeyedCollection takes the key,
        // type, in this case int.
        //
        Console.WriteLine("\nContains(101030411): {0}",
            weekly.Contains(101030411));

        // The default Item property of KeyedCollection takes a key.
        //
        Console.WriteLine("\nweekly[101030411].Description: {0}",
            weekly[101030411].Description);

        // The Remove method of KeyedCollection takes a key.
        //
        Console.WriteLine("\nRemove(101030411)");
        weekly.Remove(101030411);
        Display(weekly);

        // The Insert method, inherited from Collection, takes an
        // index and an OrderItem.
        //
        Console.WriteLine("\nInsert(2, New OrderItem(...))");
        weekly.Insert(2, new OrderItem(111033401, "Nut", 10, .5));
        Display(weekly);

        // The default Item property is overloaded. One overload comes
        // from KeyedCollection<int, OrderItem>; that overload
        // is read-only, and takes Integer because it retrieves by key.
        // The other overload comes from Collection<OrderItem>, the
        // base class of KeyedCollection<int, OrderItem>; it
        // retrieves by index, so it also takes an Integer. The compiler
        // uses the most-derived overload, from KeyedCollection, so the
        // only way to access SimpleOrder by index is to cast it to
        // Collection<OrderItem>. Otherwise the index is interpreted
        // as a key, and KeyNotFoundException is thrown.
        //
        Collection<OrderItem> coweekly = weekly;
        Console.WriteLine("\ncoweekly[2].Description: {0}",
            coweekly[2].Description);

        Console.WriteLine("\ncoweekly[2] = new OrderItem(...)");
        coweekly[2] = new OrderItem(127700026, "Crank", 27, 5.98);

        OrderItem temp = coweekly[2];

        // The IndexOf method inherited from Collection<OrderItem>
        // takes an OrderItem instead of a key
        //
        Console.WriteLine("\nIndexOf(temp): {0}", weekly.IndexOf(temp));

        // The inherited Remove method also takes an OrderItem.
        //
        Console.WriteLine("\nRemove(temp)");
        weekly.Remove(temp);
        Display(weekly);

        Console.WriteLine("\nRemoveAt(0)");
        weekly.RemoveAt(0);
        Display(weekly);
    }

    private static void Display(SimpleOrder order)
    {
        Console.WriteLine();
        foreach( OrderItem item in order )
        {
            Console.WriteLine(item);
        }
    }
}

// This class represents a simple line item in an order. All the
// values are immutable except quantity.
//
public class OrderItem
{
    public readonly int PartNumber;
    public readonly string Description;
    public readonly double UnitPrice;

    private int _quantity = 0;

    public OrderItem(int partNumber, string description,
        int quantity, double unitPrice)
    {
        this.PartNumber = partNumber;
        this.Description = description;
        this.Quantity = quantity;
        this.UnitPrice = unitPrice;
    }

    public int Quantity
    {
        get { return _quantity; }
        set
        {
            if (value<0)
                throw new ArgumentException("Quantity cannot be negative.");

            _quantity = value;
        }
    }

    public override string ToString()
    {
        return String.Format(
            "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}",
            PartNumber, _quantity, Description, UnitPrice,
            UnitPrice * _quantity);
    }
}

/* This code example produces the following output:

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
101030411     10 Motor        at   237.50 =   2,375.00
110072684    175 Gear         at     5.17 =     904.75

Contains(101030411): True

weekly[101030411].Description: Motor

Remove(101030411)

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
110072684    175 Gear         at     5.17 =     904.75

Insert(2, New OrderItem(...))

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
111033401     10 Nut          at      .50 =       5.00
110072684    175 Gear         at     5.17 =     904.75

coweekly[2].Description: Nut

coweekly[2] = new OrderItem(...)

IndexOf(temp): 2

Remove(temp)

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
110072684    175 Gear         at     5.17 =     904.75

RemoveAt(0)

110072675     27 Sprocket     at     5.30 =     143.10
110072684    175 Gear         at     5.17 =     904.75
 */
Imports System.Collections.Generic
Imports System.Collections.ObjectModel

' This class represents a very simple keyed list of OrderItems,
' inheriting most of its behavior from the KeyedCollection and 
' Collection classes. The immediate base class is the constructed
' type KeyedCollection(Of Integer, OrderItem). When you inherit
' from KeyedCollection, the second generic type argument is the 
' type that you want to store in the collection -- in this case
' OrderItem. The first generic argument is the type that you want
' to use as a key. Its values must be calculated from OrderItem; 
' in this case it is the Integer field PartNumber, so SimpleOrder
' inherits KeyedCollection(Of Integer, OrderItem).
'
Public Class SimpleOrder
    Inherits KeyedCollection(Of Integer, OrderItem)


    ' This is the only method that absolutely must be overridden,
    ' because without it the KeyedCollection cannot extract the
    ' keys from the items. The input parameter type is the 
    ' second generic type argument, in this case OrderItem, and 
    ' the return value type is the first generic type argument,
    ' in this case Integer.
    '
    Protected Overrides Function GetKeyForItem( _
        ByVal item As OrderItem) As Integer

        ' In this example, the key is the part number.
        Return item.PartNumber   
    End Function

End Class

Public Class Demo
    
    Public Shared Sub Main() 
        Dim weekly As New SimpleOrder()

        ' The Add method, inherited from Collection, takes OrderItem.
        '
        weekly.Add(New OrderItem(110072674, "Widget", 400, 45.17))
        weekly.Add(New OrderItem(110072675, "Sprocket", 27, 5.3))
        weekly.Add(New OrderItem(101030411, "Motor", 10, 237.5))
        weekly.Add(New OrderItem(110072684, "Gear", 175, 5.17))
        
        Display(weekly)
    
        ' The Contains method of KeyedCollection takes TKey.
        '
        Console.WriteLine(vbLf & "Contains(101030411): {0}", _
            weekly.Contains(101030411))

        ' The default Item property of KeyedCollection takes the key
        ' type, Integer.
        '
        Console.WriteLine(vbLf & "weekly(101030411).Description: {0}", _
            weekly(101030411).Description)

        ' The Remove method of KeyedCollection takes a key.
        '
        Console.WriteLine(vbLf & "Remove(101030411)")
        weekly.Remove(101030411)
        Display(weekly)

        ' The Insert method, inherited from Collection, takes an 
        ' index and an OrderItem.
        '
        Console.WriteLine(vbLf & "Insert(2, New OrderItem(...))")
        weekly.Insert(2, New OrderItem(111033401, "Nut", 10, .5))
        Display(weekly)

        ' The default Item property is overloaded. One overload comes
        ' from KeyedCollection(Of Integer, OrderItem); that overload
        ' is read-only, and takes Integer because it retrieves by key. 
        ' The other overload comes from Collection(Of OrderItem), the 
        ' base class of KeyedCollection(Of Integer, OrderItem); it 
        ' retrieves by index, so it also takes an Integer. The compiler
        ' uses the most-derived overload, from KeyedCollection, so the
        ' only way to access SimpleOrder by index is to cast it to
        ' Collection(Of OrderItem). Otherwise the index is interpreted
        ' as a key, and KeyNotFoundException is thrown.
        '
        Dim coweekly As Collection(Of OrderItem) = weekly
        Console.WriteLine(vbLf & "coweekly(2).Description: {0}", _
            coweekly(2).Description)
 
        Console.WriteLine(vbLf & "coweekly(2) = New OrderItem(...)")
        coweekly(2) = New OrderItem(127700026, "Crank", 27, 5.98)

        Dim temp As OrderItem = coweekly(2)

        ' The IndexOf method, inherited from Collection(Of OrderItem), 
        ' takes an OrderItem instead of a key.
        ' 
        Console.WriteLine(vbLf & "IndexOf(temp): {0}", _
            weekly.IndexOf(temp))

        ' The inherited Remove method also takes an OrderItem.
        '
        Console.WriteLine(vbLf & "Remove(temp)")
        weekly.Remove(temp)
        Display(weekly)

        Console.WriteLine(vbLf & "RemoveAt(0)")
        weekly.RemoveAt(0)
        Display(weekly)

    End Sub
    
    Private Shared Sub Display(ByVal order As SimpleOrder) 
        Console.WriteLine()
        For Each item As OrderItem In  order
            Console.WriteLine(item)
        Next item
    End Sub
End Class

' This class represents a simple line item in an order. All the 
' values are immutable except quantity.
' 
Public Class OrderItem
    Public ReadOnly PartNumber As Integer
    Public ReadOnly Description As String
    Public ReadOnly UnitPrice As Double
    
    Private _quantity As Integer = 0
    
    Public Sub New(ByVal partNumber As Integer, _
                   ByVal description As String, _
                   ByVal quantity As Integer, _
                   ByVal unitPrice As Double) 
        Me.PartNumber = partNumber
        Me.Description = description
        Me.Quantity = quantity
        Me.UnitPrice = unitPrice
    End Sub
    
    Public Property Quantity() As Integer 
        Get
            Return _quantity
        End Get
        Set
            If value < 0 Then
                Throw New ArgumentException("Quantity cannot be negative.")
            End If
            _quantity = value
        End Set
    End Property
        
    Public Overrides Function ToString() As String 
        Return String.Format( _
            "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}", _
            PartNumber, _quantity, Description, UnitPrice, _
            UnitPrice * _quantity)
    End Function
End Class

' This code example produces the following output:
'
'110072674    400 Widget       at    45.17 =  18,068.00
'110072675     27 Sprocket     at     5.30 =     143.10
'101030411     10 Motor        at   237.50 =   2,375.00
'110072684    175 Gear         at     5.17 =     904.75
'
'Contains(101030411): True
'
'weekly(101030411).Description: Motor
'
'Remove(101030411)
'
'110072674    400 Widget       at    45.17 =  18,068.00
'110072675     27 Sprocket     at     5.30 =     143.10
'110072684    175 Gear         at     5.17 =     904.75
'
'Insert(2, New OrderItem(...))
'
'110072674    400 Widget       at    45.17 =  18,068.00
'110072675     27 Sprocket     at     5.30 =     143.10
'111033401     10 Nut          at      .50 =       5.00
'110072684    175 Gear         at     5.17 =     904.75
'
'coweekly(2).Description: Nut
'
'coweekly(2) = New OrderItem(...)
'
'IndexOf(temp): 2
'
'Remove(temp)
'
'110072674    400 Widget       at    45.17 =  18,068.00
'110072675     27 Sprocket     at     5.30 =     143.10
'110072684    175 Gear         at     5.17 =     904.75
'
'RemoveAt(0)
'
'110072675     27 Sprocket     at     5.30 =     143.10
'110072684    175 Gear         at     5.17 =     904.75

Ejemplo 2

En el ejemplo de código siguiente se muestra cómo invalidar los métodos protegidos InsertItem, ClearItemsRemoveItem, , y SetItem para proporcionar un comportamiento personalizado para los Addmétodos , Removey Clear para establecer la propiedad predeterminada Item[] (el indexador en C#). El comportamiento personalizado proporcionado en este ejemplo es un evento de notificación denominado Changed, que se genera al final de cada uno de los métodos invalidados.

El ejemplo de código crea la SimpleOrder clase , que deriva de KeyedCollection<TKey,TItem> y representa un formulario de orden simple. El formulario de pedido contiene OrderItem objetos que representan elementos ordenados. El ejemplo de código también crea una SimpleOrderChangedEventArgs clase para contener la información del evento y una enumeración para identificar el tipo de cambio.

En el ejemplo de código se muestra el comportamiento personalizado llamando a las propiedades y métodos de la clase derivada, en el Main método de la Demo clase .

En este ejemplo de código se usan objetos con claves inmutables. Para obtener un ejemplo de código que usa claves mutables, vea ChangeItemKey.

using namespace System;
using namespace System::Collections::Generic;
using namespace System::Collections::ObjectModel;

public enum class ChangeTypes
{
    Added,
    Removed, 
    Replaced, 
    Cleared
};

ref class SimpleOrderChangedEventArgs; 

// This class represents a simple line item in an order. All the 
// values are immutable except quantity.
// 
public ref class OrderItem
{
private:
    int _quantity;

public:
    initonly int PartNumber;
    initonly String^ Description;
    initonly double UnitPrice;
        
    OrderItem(int partNumber, String^ description, int quantity, 
        double unitPrice)
    {
        this->PartNumber = partNumber;
        this->Description = description;
        this->Quantity = quantity;
        this->UnitPrice = unitPrice;
    };
    
    property int Quantity    
    {
        int get() { return _quantity; };
        void set(int value)
        {
            if (value < 0)
                throw gcnew ArgumentException("Quantity cannot be negative.");
            
            _quantity = value;
        };
    };
        
    virtual String^ ToString() override 
    {
        return String::Format(
            "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}", 
            PartNumber, _quantity, Description, UnitPrice, 
            UnitPrice * _quantity);
    };
};

// Event argument for the Changed event.
//
public ref class SimpleOrderChangedEventArgs : EventArgs
{
public:
    OrderItem^ ChangedItem;
    initonly ChangeTypes ChangeType;
    OrderItem^ ReplacedWith;

    SimpleOrderChangedEventArgs(ChangeTypes change, 
        OrderItem^ item, OrderItem^ replacement)
    {
        this->ChangeType = change;
        this->ChangedItem = item;
        this->ReplacedWith = replacement;
    }
};

// This class derives from KeyedCollection and shows how to override
// the protected ClearItems, InsertItem, RemoveItem, and SetItem 
// methods in order to change the behavior of the default Item 
// property and the Add, Clear, Insert, and Remove methods. The
// class implements a Changed event, which is raised by all the
// protected methods.
//
// SimpleOrder is a collection of OrderItem objects, and its key
// is the PartNumber field of OrderItem-> PartNumber is an Integer,
// so SimpleOrder inherits KeyedCollection<int, OrderItem>.
// (Note that the key of OrderItem cannot be changed; if it could 
// be changed, SimpleOrder would have to override ChangeItemKey.)
//
public ref class SimpleOrder : KeyedCollection<int, OrderItem^>
{
public:
    event EventHandler<SimpleOrderChangedEventArgs^>^ Changed;

    // This parameterless constructor calls the base class constructor
    // that specifies a dictionary threshold of 0, so that the internal
    // dictionary is created as soon as an item is added to the 
    // collection.
    //
    SimpleOrder() : KeyedCollection<int, OrderItem^>(nullptr, 0) {};
    
    // This is the only method that absolutely must be overridden,
    // because without it the KeyedCollection cannot extract the
    // keys from the items. 
    //
protected:
    virtual int GetKeyForItem(OrderItem^ item) override
    {
        // In this example, the key is the part number.
        return item->PartNumber;
    }

    virtual void InsertItem(int index, OrderItem^ newItem) override 
    {
        __super::InsertItem(index, newItem);

        Changed(this, gcnew SimpleOrderChangedEventArgs(
            ChangeTypes::Added, newItem, nullptr));
    }

    virtual void SetItem(int index, OrderItem^ newItem) override 
    {
        OrderItem^ replaced = this->Items[index];
        __super::SetItem(index, newItem);

        Changed(this, gcnew SimpleOrderChangedEventArgs(
            ChangeTypes::Replaced, replaced, newItem));
    }

    virtual void RemoveItem(int index) override 
    {
        OrderItem^ removedItem = Items[index];
        __super::RemoveItem(index);

        Changed(this, gcnew SimpleOrderChangedEventArgs(
            ChangeTypes::Removed, removedItem, nullptr));
    }

    virtual void ClearItems() override 
    {
        __super::ClearItems();

        Changed(this, gcnew SimpleOrderChangedEventArgs(
            ChangeTypes::Cleared, nullptr, nullptr));
    }

    // This method uses the internal reference to the dictionary
    // to test fo
public:
    void AddOrMerge(OrderItem^ newItem)
    {

        int key = this->GetKeyForItem(newItem);
        OrderItem^ existingItem = nullptr;

        // The dictionary is not created until the first item is 
        // added, so it is necessary to test for null. Using 
        // AndAlso ensures that TryGetValue is not called if the
        // dictionary does not exist.
        //
        if (this->Dictionary != nullptr && 
            this->Dictionary->TryGetValue(key, existingItem))
        {
            existingItem->Quantity += newItem->Quantity;
        }
        else
        {
            this->Add(newItem);
        }
    }
};

public ref class Demo
{    
public:
    static void Main()
    {
        SimpleOrder^ weekly = gcnew SimpleOrder();
        weekly->Changed += gcnew 
            EventHandler<SimpleOrderChangedEventArgs^>(ChangedHandler);

        // The Add method, inherited from Collection, takes OrderItem->
        //
        weekly->Add(gcnew OrderItem(110072674, "Widget", 400, 45.17));
        weekly->Add(gcnew OrderItem(110072675, "Sprocket", 27, 5.3));
        weekly->Add(gcnew OrderItem(101030411, "Motor", 10, 237.5));
        weekly->Add(gcnew OrderItem(110072684, "Gear", 175, 5.17));

        Display(weekly);
        
        // The Contains method of KeyedCollection takes TKey.
        //
        Console::WriteLine("\nContains(101030411): {0}", 
            weekly->Contains(101030411));

        // The default Item property of KeyedCollection takes the key
        // type, Integer. The property is read-only.
        //
        Console::WriteLine("\nweekly[101030411]->Description: {0}", 
            weekly[101030411]->Description);

        // The Remove method of KeyedCollection takes a key.
        //
        Console::WriteLine("\nRemove(101030411)");
        weekly->Remove(101030411);

        // The Insert method, inherited from Collection, takes an 
        // index and an OrderItem.
        //
        Console::WriteLine("\nInsert(2, gcnew OrderItem(...))");
        weekly->Insert(2, gcnew OrderItem(111033401, "Nut", 10, .5));
         
        // The default Item property is overloaded. One overload comes
        // from KeyedCollection<int, OrderItem>; that overload
        // is read-only, and takes Integer because it retrieves by key. 
        // The other overload comes from Collection<OrderItem>, the 
        // base class of KeyedCollection<int, OrderItem>; it 
        // retrieves by index, so it also takes an Integer. The compiler
        // uses the most-derived overload, from KeyedCollection, so the
        // only way to access SimpleOrder by index is to cast it to
        // Collection<OrderItem>. Otherwise the index is interpreted
        // as a key, and KeyNotFoundException is thrown.
        //
        Collection<OrderItem^>^ coweekly = weekly;
        Console::WriteLine("\ncoweekly[2].Description: {0}", 
            coweekly[2]->Description);
 
        Console::WriteLine("\ncoweekly[2] = gcnew OrderItem(...)");
        coweekly[2] = gcnew OrderItem(127700026, "Crank", 27, 5.98);

        OrderItem^ temp = coweekly[2];

        // The IndexOf method, inherited from Collection<OrderItem>, 
        // takes an OrderItem instead of a key.
        // 
        Console::WriteLine("\nIndexOf(temp): {0}", weekly->IndexOf(temp));

        // The inherited Remove method also takes an OrderItem->
        //
        Console::WriteLine("\nRemove(temp)");
        weekly->Remove(temp);

        Console::WriteLine("\nRemoveAt(0)");
        weekly->RemoveAt(0);

        weekly->AddOrMerge(gcnew OrderItem(110072684, "Gear", 1000, 5.17));

        Display(weekly);

        Console::WriteLine();
        weekly->Clear();
    }
    
private:
    static void Display(SimpleOrder^ order)
    {
        Console::WriteLine();
        for each( OrderItem^ item in order )
        {
            Console::WriteLine(item);
        }
    }

    static void ChangedHandler(Object^ source, 
        SimpleOrderChangedEventArgs^ e)
    {
        OrderItem^ item = e->ChangedItem;

        if (e->ChangeType == ChangeTypes::Replaced)
        {
            OrderItem^ replacement = e->ReplacedWith;

            Console::WriteLine("{0} (quantity {1}) was replaced " +
                "by {2}, (quantity {3}).", item->Description, 
                item->Quantity, replacement->Description, 
                replacement->Quantity);
        }
        else if(e->ChangeType == ChangeTypes::Cleared)
        {
            Console::WriteLine("The order list was cleared.");
        }
        else
        {
            Console::WriteLine("{0} (quantity {1}) was {2}.", 
                item->Description, item->Quantity, e->ChangeType);
        }
    }
};

void main()
{
    Demo::Main();
}

/* This code example produces the following output:

Widget (quantity 400) was Added.
Sprocket (quantity 27) was Added.
Motor (quantity 10) was Added.
Gear (quantity 175) was Added.

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
101030411     10 Motor        at   237.50 =   2,375.00
110072684    175 Gear         at     5.17 =     904.75

Contains(101030411): True

weekly[101030411]->Description: Motor

Remove(101030411)
Motor (quantity 10) was Removed.

Insert(2, gcnew OrderItem(...))
Nut (quantity 10) was Added.

coweekly[2].Description: Nut

coweekly[2] = gcnew OrderItem(...)
Nut (quantity 10) was replaced by Crank, (quantity 27).

IndexOf(temp): 2

Remove(temp)
Crank (quantity 27) was Removed.

RemoveAt(0)
Widget (quantity 400) was Removed.

110072675     27 Sprocket     at     5.30 =     143.10
110072684   1175 Gear         at     5.17 =   6,074.75

The order list was cleared.
 */
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

// This class derives from KeyedCollection and shows how to override
// the protected ClearItems, InsertItem, RemoveItem, and SetItem
// methods in order to change the behavior of the default Item
// property and the Add, Clear, Insert, and Remove methods. The
// class implements a Changed event, which is raised by all the
// protected methods.
//
// SimpleOrder is a collection of OrderItem objects, and its key
// is the PartNumber field of OrderItem. PartNumber is an Integer,
// so SimpleOrder inherits KeyedCollection<int, OrderItem>.
// (Note that the key of OrderItem cannot be changed; if it could
// be changed, SimpleOrder would have to override ChangeItemKey.)
//
public class SimpleOrder : KeyedCollection<int, OrderItem>
{
    public event EventHandler<SimpleOrderChangedEventArgs> Changed;

    // This parameterless constructor calls the base class constructor
    // that specifies a dictionary threshold of 0, so that the internal
    // dictionary is created as soon as an item is added to the
    // collection.
    //
    public SimpleOrder() : base(null, 0) {}

    // This is the only method that absolutely must be overridden,
    // because without it the KeyedCollection cannot extract the
    // keys from the items.
    //
    protected override int GetKeyForItem(OrderItem item)
    {
        // In this example, the key is the part number.
        return item.PartNumber;
    }

    protected override void InsertItem(int index, OrderItem newItem)
    {
        base.InsertItem(index, newItem);

        EventHandler<SimpleOrderChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new SimpleOrderChangedEventArgs(
                ChangeType.Added, newItem, null));
        }
    }

    protected override void SetItem(int index, OrderItem newItem)
    {
        OrderItem replaced = Items[index];
        base.SetItem(index, newItem);

        EventHandler<SimpleOrderChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new SimpleOrderChangedEventArgs(
                ChangeType.Replaced, replaced, newItem));
        }
    }

    protected override void RemoveItem(int index)
    {
        OrderItem removedItem = Items[index];
        base.RemoveItem(index);

        EventHandler<SimpleOrderChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new SimpleOrderChangedEventArgs(
                ChangeType.Removed, removedItem, null));
        }
    }

    protected override void ClearItems()
    {
        base.ClearItems();

        EventHandler<SimpleOrderChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new SimpleOrderChangedEventArgs(
                ChangeType.Cleared, null, null));
        }
    }
}

// Event argument for the Changed event.
//
public class SimpleOrderChangedEventArgs : EventArgs
{
    private OrderItem _changedItem;
    private ChangeType _changeType;
    private OrderItem _replacedWith;

    public OrderItem ChangedItem { get { return _changedItem; }}
    public ChangeType ChangeType { get { return _changeType; }}
    public OrderItem ReplacedWith { get { return _replacedWith; }}

    public SimpleOrderChangedEventArgs(ChangeType change,
        OrderItem item, OrderItem replacement)
    {
        _changeType = change;
        _changedItem = item;
        _replacedWith = replacement;
    }
}

public enum ChangeType
{
    Added,
    Removed,
    Replaced,
    Cleared
};

public class Demo
{
    public static void Main()
    {
        SimpleOrder weekly = new SimpleOrder();
        weekly.Changed += new
            EventHandler<SimpleOrderChangedEventArgs>(ChangedHandler);

        // The Add method, inherited from Collection, takes OrderItem.
        //
        weekly.Add(new OrderItem(110072674, "Widget", 400, 45.17));
        weekly.Add(new OrderItem(110072675, "Sprocket", 27, 5.3));
        weekly.Add(new OrderItem(101030411, "Motor", 10, 237.5));
        weekly.Add(new OrderItem(110072684, "Gear", 175, 5.17));

        Display(weekly);

        // The Contains method of KeyedCollection takes TKey.
        //
        Console.WriteLine("\nContains(101030411): {0}",
            weekly.Contains(101030411));

        // The default Item property of KeyedCollection takes the key
        // type, Integer. The property is read-only.
        //
        Console.WriteLine("\nweekly[101030411].Description: {0}",
            weekly[101030411].Description);

        // The Remove method of KeyedCollection takes a key.
        //
        Console.WriteLine("\nRemove(101030411)");
        weekly.Remove(101030411);

        // The Insert method, inherited from Collection, takes an
        // index and an OrderItem.
        //
        Console.WriteLine("\nInsert(2, new OrderItem(...))");
        weekly.Insert(2, new OrderItem(111033401, "Nut", 10, .5));

        // The default Item property is overloaded. One overload comes
        // from KeyedCollection<int, OrderItem>; that overload
        // is read-only, and takes Integer because it retrieves by key.
        // The other overload comes from Collection<OrderItem>, the
        // base class of KeyedCollection<int, OrderItem>; it
        // retrieves by index, so it also takes an Integer. The compiler
        // uses the most-derived overload, from KeyedCollection, so the
        // only way to access SimpleOrder by index is to cast it to
        // Collection<OrderItem>. Otherwise the index is interpreted
        // as a key, and KeyNotFoundException is thrown.
        //
        Collection<OrderItem> coweekly = weekly;
        Console.WriteLine("\ncoweekly[2].Description: {0}",
            coweekly[2].Description);

        Console.WriteLine("\ncoweekly[2] = new OrderItem(...)");
        coweekly[2] = new OrderItem(127700026, "Crank", 27, 5.98);

        OrderItem temp = coweekly[2];

        // The IndexOf method, inherited from Collection<OrderItem>,
        // takes an OrderItem instead of a key.
        //
        Console.WriteLine("\nIndexOf(temp): {0}", weekly.IndexOf(temp));

        // The inherited Remove method also takes an OrderItem.
        //
        Console.WriteLine("\nRemove(temp)");
        weekly.Remove(temp);

        Console.WriteLine("\nRemoveAt(0)");
        weekly.RemoveAt(0);

        // Increase the quantity for a line item.
        Console.WriteLine("\ncoweekly(1) = New OrderItem(...)");
        coweekly[1] = new OrderItem(coweekly[1].PartNumber,
            coweekly[1].Description, coweekly[1].Quantity + 1000,
            coweekly[1].UnitPrice);

        Display(weekly);

        Console.WriteLine();
        weekly.Clear();
    }

    private static void Display(SimpleOrder order)
    {
        Console.WriteLine();
        foreach( OrderItem item in order )
        {
            Console.WriteLine(item);
        }
    }

    private static void ChangedHandler(object source,
        SimpleOrderChangedEventArgs e)
    {

        OrderItem item = e.ChangedItem;

        if (e.ChangeType==ChangeType.Replaced)
        {
            OrderItem replacement = e.ReplacedWith;

            Console.WriteLine("{0} (quantity {1}) was replaced " +
                "by {2}, (quantity {3}).", item.Description,
                item.Quantity, replacement.Description,
                replacement.Quantity);
        }
        else if(e.ChangeType == ChangeType.Cleared)
        {
            Console.WriteLine("The order list was cleared.");
        }
        else
        {
            Console.WriteLine("{0} (quantity {1}) was {2}.",
                item.Description, item.Quantity, e.ChangeType);
        }
    }
}

// This class represents a simple line item in an order. All the
// values are immutable except quantity.
//
public class OrderItem
{
    private int _partNumber;
    private string _description;
    private double _unitPrice;
    private int _quantity;

    public int PartNumber { get { return _partNumber; }}
    public string Description { get { return _description; }}
    public double UnitPrice { get { return _unitPrice; }}
    public int Quantity { get { return _quantity; }}

    public OrderItem(int partNumber, string description, int quantity,
        double unitPrice)
    {
        _partNumber = partNumber;
        _description = description;
        _quantity = quantity;
        _unitPrice = unitPrice;
    }

    public override string ToString()
    {
        return String.Format(
            "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}",
            PartNumber, _quantity, Description, UnitPrice,
            UnitPrice * _quantity);
    }
}

/* This code example produces the following output:

Widget (quantity 400) was Added.
Sprocket (quantity 27) was Added.
Motor (quantity 10) was Added.
Gear (quantity 175) was Added.

110072674    400 Widget       at    45.17 =  18,068.00
110072675     27 Sprocket     at     5.30 =     143.10
101030411     10 Motor        at   237.50 =   2,375.00
110072684    175 Gear         at     5.17 =     904.75

Contains(101030411): True

weekly[101030411].Description: Motor

Remove(101030411)
Motor (quantity 10) was Removed.

Insert(2, new OrderItem(...))
Nut (quantity 10) was Added.

coweekly[2].Description: Nut

coweekly[2] = new OrderItem(...)
Nut (quantity 10) was replaced by Crank, (quantity 27).

IndexOf(temp): 2

Remove(temp)
Crank (quantity 27) was Removed.

RemoveAt(0)
Widget (quantity 400) was Removed.

coweekly(1) = New OrderItem(...)
Gear (quantity 175) was replaced by Gear, (quantity 1175).

110072675     27 Sprocket     at     5.30 =     143.10
110072684   1175 Gear         at     5.17 =   6,074.75

The order list was cleared.
 */
Imports System.Collections.Generic
Imports System.Collections.ObjectModel

' This class derives from KeyedCollection and shows how to override
' the protected ClearItems, InsertItem, RemoveItem, and SetItem 
' methods in order to change the behavior of the default Item 
' property and the Add, Clear, Insert, and Remove methods. The
' class implements a Changed event, which is raised by all the
' protected methods.
'
' SimpleOrder is a collection of OrderItem objects, and its key
' is the PartNumber field of OrderItem. PartNumber is an Integer,
' so SimpleOrder inherits KeyedCollection(Of Integer, OrderItem).
' (Note that the key of OrderItem cannot be changed; if it could 
' be changed, SimpleOrder would have to override ChangeItemKey.)
'
Public Class SimpleOrder
    Inherits KeyedCollection(Of Integer, OrderItem)

    Public Event Changed As EventHandler(Of SimpleOrderChangedEventArgs)

    ' This parameterless constructor calls the base class constructor
    ' that specifies a dictionary threshold of 0, so that the internal
    ' dictionary is created as soon as an item is added to the 
    ' collection.
    '
    Public Sub New()
        MyBase.New(Nothing, 0)
    End Sub
    
    ' This is the only method that absolutely must be overridden,
    ' because without it the KeyedCollection cannot extract the
    ' keys from the items. 
    '
    Protected Overrides Function GetKeyForItem( _
        ByVal item As OrderItem) As Integer

        ' In this example, the key is the part number.
        Return item.PartNumber   
    End Function

    Protected Overrides Sub InsertItem( _
        ByVal index As Integer, ByVal newItem As OrderItem)

        MyBase.InsertItem(index, newItem)

        RaiseEvent Changed(Me, New SimpleOrderChangedEventArgs( _
            ChangeType.Added, newItem, Nothing))
    End Sub

    Protected Overrides Sub SetItem(ByVal index As Integer, _
        ByVal newItem As OrderItem)

        Dim replaced As OrderItem = Items(index)
        MyBase.SetItem(index, newItem)

        RaiseEvent Changed(Me, New SimpleOrderChangedEventArgs( _
            ChangeType.Replaced, replaced, newItem))
    End Sub

    Protected Overrides Sub RemoveItem(ByVal index As Integer)

        Dim removedItem As OrderItem = Items(index)
        MyBase.RemoveItem(index)

        RaiseEvent Changed(Me, New SimpleOrderChangedEventArgs( _
            ChangeType.Removed, removedItem, Nothing))
    End Sub

    Protected Overrides Sub ClearItems()
        MyBase.ClearItems()

        RaiseEvent Changed(Me, New SimpleOrderChangedEventArgs( _
            ChangeType.Cleared, Nothing, Nothing))
    End Sub

End Class

' Event argument for the Changed event.
'
Public Class SimpleOrderChangedEventArgs
    Inherits EventArgs

    Private _changedItem As OrderItem
    Private _changeType As ChangeType
    Private _replacedWith As OrderItem

    Public ReadOnly Property ChangedItem As OrderItem
        Get
            Return _changedItem
        End Get
    End Property

    Public ReadOnly Property ChangeType As ChangeType
        Get
            Return _changeType
        End Get
    End Property

    Public ReadOnly Property ReplacedWith As OrderItem
        Get
            Return _replacedWith
        End Get
    End Property

    Public Sub New(ByVal change As ChangeType, ByVal item As OrderItem, _
        ByVal replacement As OrderItem)

        _changeType = change
        _changedItem = item
        _replacedWith = replacement
    End Sub
End Class

Public Enum ChangeType
    Added
    Removed
    Replaced
    Cleared
End Enum

Public Class Demo
    
    Public Shared Sub Main() 
        Dim weekly As New SimpleOrder()
        AddHandler weekly.Changed, AddressOf ChangedHandler

        ' The Add method, inherited from Collection, takes OrderItem.
        '
        weekly.Add(New OrderItem(110072674, "Widget", 400, 45.17))
        weekly.Add(New OrderItem(110072675, "Sprocket", 27, 5.3))
        weekly.Add(New OrderItem(101030411, "Motor", 10, 237.5))
        weekly.Add(New OrderItem(110072684, "Gear", 175, 5.17))

        Display(weekly)
        
        ' The Contains method of KeyedCollection takes TKey.
        '
        Console.WriteLine(vbLf & "Contains(101030411): {0}", _
            weekly.Contains(101030411))

        ' The default Item property of KeyedCollection takes the key
        ' type, Integer. The property is read-only.
        '
        Console.WriteLine(vbLf & "weekly(101030411).Description: {0}", _
            weekly(101030411).Description)

        ' The Remove method of KeyedCollection takes a key.
        '
        Console.WriteLine(vbLf & "Remove(101030411)")
        weekly.Remove(101030411)

        ' The Insert method, inherited from Collection, takes an 
        ' index and an OrderItem.
        '
        Console.WriteLine(vbLf & "Insert(2, New OrderItem(...))")
        weekly.Insert(2, New OrderItem(111033401, "Nut", 10, .5))
         
        ' The default Item property is overloaded. One overload comes
        ' from KeyedCollection(Of Integer, OrderItem); that overload
        ' is read-only, and takes Integer because it retrieves by key. 
        ' The other overload comes from Collection(Of OrderItem), the 
        ' base class of KeyedCollection(Of Integer, OrderItem); it 
        ' retrieves by index, so it also takes an Integer. The compiler
        ' uses the most-derived overload, from KeyedCollection, so the
        ' only way to access SimpleOrder by index is to cast it to
        ' Collection(Of OrderItem). Otherwise the index is interpreted
        ' as a key, and KeyNotFoundException is thrown.
        '
        Dim coweekly As Collection(Of OrderItem) = weekly
        Console.WriteLine(vbLf & "coweekly(2).Description: {0}", _
            coweekly(2).Description)
 
        Console.WriteLine(vbLf & "coweekly(2) = New OrderItem(...)")
        coweekly(2) = New OrderItem(127700026, "Crank", 27, 5.98)

        Dim temp As OrderItem = coweekly(2)

        ' The IndexOf method, inherited from Collection(Of OrderItem), 
        ' takes an OrderItem instead of a key.
        ' 
        Console.WriteLine(vbLf & "IndexOf(temp): {0}", _
            weekly.IndexOf(temp))

        ' The inherited Remove method also takes an OrderItem.
        '
        Console.WriteLine(vbLf & "Remove(temp)")
        weekly.Remove(temp)

        Console.WriteLine(vbLf & "RemoveAt(0)")
        weekly.RemoveAt(0)

        ' Increase the quantity for a line item.
        Console.WriteLine(vbLf & "coweekly(1) = New OrderItem(...)")
        coweekly(1) = New OrderItem(coweekly(1).PartNumber, _
            coweekly(1).Description, coweekly(1).Quantity + 1000, _
            coweekly(1).UnitPrice)

        Display(weekly)

        Console.WriteLine()
        weekly.Clear()
    End Sub
    
    Private Shared Sub Display(ByVal order As SimpleOrder) 
        Console.WriteLine()
        For Each item As OrderItem In  order
            Console.WriteLine(item)
        Next item
    End Sub

    Private Shared Sub ChangedHandler(ByVal source As Object, _
        ByVal e As SimpleOrderChangedEventArgs)

        Dim item As OrderItem = e.ChangedItem

        If e.ChangeType = ChangeType.Replaced Then
            Dim replacement As OrderItem = e.ReplacedWith

            Console.WriteLine("{0} (quantity {1}) was replaced " & _
                "by {2}, (quantity {3}).", item.Description, _
                item.Quantity, replacement.Description, replacement.Quantity)

        ElseIf e.ChangeType = ChangeType.Cleared Then
            Console.WriteLine("The order list was cleared.")

        Else
            Console.WriteLine("{0} (quantity {1}) was {2}.", _
                item.Description, item.Quantity, e.ChangeType)
        End If
    End Sub
End Class

' This class represents a simple line item in an order. All the 
' values are immutable except quantity.
' 
Public Class OrderItem
    
    Private _partNumber As Integer
    Private _description As String
    Private _unitPrice As Double
    Private _quantity As Integer

    Public ReadOnly Property PartNumber As Integer
        Get
            Return _partNumber
        End Get
    End Property

    Public ReadOnly Property Description As String
        Get
            Return _description
        End Get
    End Property

    Public ReadOnly Property UnitPrice As Double
        Get
            Return _unitPrice
        End Get
    End Property
    
    Public ReadOnly Property Quantity() As Integer 
        Get
            Return _quantity
        End Get
    End Property
    
    Public Sub New(ByVal partNumber As Integer, _
                   ByVal description As String, _
                   ByVal quantity As Integer, _
                   ByVal unitPrice As Double) 
        _partNumber = partNumber
        _description = description
        _quantity = quantity
        _unitPrice = unitPrice
    End Sub
        
    Public Overrides Function ToString() As String 
        Return String.Format( _
            "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}", _
            PartNumber, _quantity, Description, UnitPrice, _
            UnitPrice * _quantity)
    End Function
End Class

' This code example produces the following output:
'
'Widget (quantity 400) was Added.
'Sprocket (quantity 27) was Added.
'Motor (quantity 10) was Added.
'Gear (quantity 175) was Added.
'
'110072674    400 Widget       at    45.17 =  18,068.00
'110072675     27 Sprocket     at     5.30 =     143.10
'101030411     10 Motor        at   237.50 =   2,375.00
'110072684    175 Gear         at     5.17 =     904.75
'
'Contains(101030411): True
'
'weekly(101030411).Description: Motor
'
'Remove(101030411)
'Motor (quantity 10) was Removed.
'
'Insert(2, New OrderItem(...))
'Nut (quantity 10) was Added.
'
'coweekly(2).Description: Nut
'
'coweekly(2) = New OrderItem(...)
'Nut (quantity 10) was replaced by Crank, (quantity 27).
'
'IndexOf(temp): 2
'
'Remove(temp)
'Crank (quantity 27) was Removed.
'
'RemoveAt(0)
'Widget (quantity 400) was Removed.
'
'coweekly(1) = New OrderItem(...)
'Gear (quantity 175) was replaced by Gear, (quantity 1175).
'
'110072675     27 Sprocket     at     5.30 =     143.10
'110072684   1175 Gear         at     5.17 =   6,074.75
'
'The order list was cleared.

Comentarios

La KeyedCollection<TKey,TItem> clase proporciona tanto la recuperación indizada de O(1) como la recuperación con clave que se aproxima a O(1). Es un tipo abstracto, o con mayor precisión, un conjunto infinito de tipos abstractos, porque cada uno de sus tipos genéricos construidos es una clase base abstracta. Para usar KeyedCollection<TKey,TItem>, derive el tipo de colección del tipo construido adecuado.

La KeyedCollection<TKey,TItem> clase es un híbrido entre una colección basada en la IList<T> interfaz genérica y una colección basada en la IDictionary<TKey,TValue> interfaz genérica. Al igual que las colecciones basadas en la IList<T> interfaz genérica, KeyedCollection<TKey,TItem> es una lista indizada de elementos. Al igual que las colecciones basadas en la IDictionary<TKey,TValue> interfaz genérica, KeyedCollection<TKey,TItem> tiene una clave asociada a cada elemento.

A diferencia de los diccionarios, un elemento de KeyedCollection<TKey,TItem> no es un par clave-valor; en su lugar, todo el elemento es el valor y la clave se inserta dentro del valor. Por ejemplo, un elemento de una colección derivada de KeyedCollection\<String,String> (KeyedCollection(Of String, String) en Visual Basic) podría ser "John Doe Jr." donde el valor es "John Doe Jr." y la clave es "Doe"; o una colección de registros de empleados que contienen claves enteras podría derivarse de KeyedCollection\<int,Employee>. El método abstracto GetKeyForItem extrae la clave del elemento .

De forma predeterminada, KeyedCollection<TKey,TItem> incluye un diccionario de búsqueda que se puede obtener con la Dictionary propiedad . Cuando se agrega un elemento a KeyedCollection<TKey,TItem>, la clave del elemento se extrae una vez y se guarda en el diccionario de búsqueda para búsquedas más rápidas. Este comportamiento se invalida especificando un umbral de creación de diccionario al crear .KeyedCollection<TKey,TItem> El diccionario de búsqueda se crea la primera vez que el número de elementos supera ese umbral. Si especifica -1 como umbral, nunca se crea el diccionario de búsqueda.

Nota:

Cuando se usa el diccionario de búsqueda interna, contiene referencias a todos los elementos de la colección si TItem es un tipo de referencia o copias de todos los elementos de la colección si TItem es un tipo de valor. Por lo tanto, es posible que el uso del diccionario de búsqueda no sea adecuado si TItem es un tipo de valor.

Puede acceder a un elemento por su índice o clave mediante la Item[] propiedad . Puede agregar elementos sin una clave, pero posteriormente solo se puede acceder a estos elementos por índice.

Constructores

KeyedCollection<TKey,TItem>()

Inicializa una nueva instancia de la clase KeyedCollection<TKey,TItem> que utiliza el comparador de igualdad predeterminado.

KeyedCollection<TKey,TItem>(IEqualityComparer<TKey>)

Inicializa una nueva instancia de la clase KeyedCollection<TKey,TItem> que utiliza el comparador de igualdad especificado.

KeyedCollection<TKey,TItem>(IEqualityComparer<TKey>, Int32)

Inicializa una nueva instancia de la clase KeyedCollection<TKey,TItem> que utiliza el comparador de igualdad especificado y crea un diccionario de búsqueda cuando se supera el umbral especificado.

Propiedades

Comparer

Obtiene el comparador de igualdad genérico que se utiliza para determinar la igualdad de claves en la colección.

Count

Obtiene el número de elementos contenido realmente en Collection<T>.

(Heredado de Collection<T>)
Dictionary

Obtiene el diccionario de búsqueda de KeyedCollection<TKey,TItem>.

Item[Int32]

Obtiene o establece el elemento en el índice especificado.

(Heredado de Collection<T>)
Item[TKey]

Obtiene el elemento con la clave especificada.

Items

Obtiene un contenedor de IList<T> para la colección Collection<T>.

(Heredado de Collection<T>)

Métodos

Add(T)

Agrega un objeto al final de Collection<T>.

(Heredado de Collection<T>)
ChangeItemKey(TItem, TKey)

Cambia la clave asociada al elemento especificado en el diccionario de búsqueda.

Clear()

Quita todos los elementos de Collection<T>.

(Heredado de Collection<T>)
ClearItems()

Quita todos los elementos de KeyedCollection<TKey,TItem>.

Contains(TKey)

Determina si la colección contiene un elemento con la clave especificada.

CopyTo(T[], Int32)

Copia la totalidad de Collection<T> en una matriz Array unidimensional compatible, comenzando en el índice especificado de la matriz de destino.

(Heredado de Collection<T>)
Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetEnumerator()

Devuelve un enumerador que recorre en iteración la colección Collection<T>.

(Heredado de Collection<T>)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetKeyForItem(TItem)

Cuando se implementa en una clase derivada, extrae la clave del elemento especificado.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IndexOf(T)

Busca el objeto especificado y devuelve el índice de base cero de la primera aparición en todo el Collection<T>.

(Heredado de Collection<T>)
Insert(Int32, T)

Inserta un elemento en Collection<T> en el índice especificado.

(Heredado de Collection<T>)
InsertItem(Int32, T)

Inserta un elemento en Collection<T> en el índice especificado.

(Heredado de Collection<T>)
InsertItem(Int32, TItem)

Inserta un elemento en KeyedCollection<TKey,TItem> en el índice especificado.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
Remove(TKey)

Quita el elemento con la clave especificada de KeyedCollection<TKey,TItem>.

RemoveAt(Int32)

Quita el elemento situado en el índice especificado de Collection<T>.

(Heredado de Collection<T>)
RemoveItem(Int32)

Quita el elemento situado en el índice especificado de KeyedCollection<TKey,TItem>.

SetItem(Int32, T)

Reemplaza el elemento en el índice especificado.

(Heredado de Collection<T>)
SetItem(Int32, TItem)

Reemplaza el elemento situado en el índice determinado con el elemento especificado.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
TryGetValue(TKey, TItem)

Intenta obtener un elemento de la colección mediante la clave especificada.

Implementaciones de interfaz explícitas

ICollection.CopyTo(Array, Int32)

Copia los elementos de ICollection en Array, empezando por un índice determinado de Array.

(Heredado de Collection<T>)
ICollection.IsSynchronized

Obtiene un valor que indica si el acceso a la interfaz ICollection está sincronizado (es seguro para subprocesos).

(Heredado de Collection<T>)
ICollection.SyncRoot

Obtiene un objeto que se puede usar para sincronizar el acceso a ICollection.

(Heredado de Collection<T>)
ICollection<T>.IsReadOnly

Obtiene un valor que indica si ICollection<T> es de solo lectura.

(Heredado de Collection<T>)
IEnumerable.GetEnumerator()

Devuelve un enumerador que recorre en iteración una colección.

(Heredado de Collection<T>)
IList.Add(Object)

Agrega un elemento a IList.

(Heredado de Collection<T>)
IList.Contains(Object)

Determina si IList contiene un valor específico.

(Heredado de Collection<T>)
IList.IndexOf(Object)

Determina el índice de un elemento específico de IList.

(Heredado de Collection<T>)
IList.Insert(Int32, Object)

Inserta un elemento en la interfaz IList, en el índice especificado.

(Heredado de Collection<T>)
IList.IsFixedSize

Obtiene un valor que indica si la interfaz IList tiene un tamaño fijo.

(Heredado de Collection<T>)
IList.IsReadOnly

Obtiene un valor que indica si IList es de solo lectura.

(Heredado de Collection<T>)
IList.Item[Int32]

Obtiene o establece el elemento en el índice especificado.

(Heredado de Collection<T>)
IList.Remove(Object)

Quita la primera aparición de un objeto específico de la interfaz IList.

(Heredado de Collection<T>)

Métodos de extensión

ToFrozenDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Crea un FrozenDictionary<TKey,TValue> objeto a partir de una IEnumerable<T> función de selector de claves especificada.

ToFrozenDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Crea un objeto FrozenDictionary<TKey,TValue> a partir de un objeto IEnumerable<T> según el selector de claves especificado y las funciones del selector de elementos.

ToFrozenSet<T>(IEnumerable<T>, IEqualityComparer<T>)

Crea un FrozenSet<T> objeto con los valores especificados.

AsReadOnly<T>(IList<T>)

Devuelve un contenedor de solo ReadOnlyCollection<T> lectura para la lista especificada.

ToImmutableArray<TSource>(IEnumerable<TSource>)

Crea una matriz inmutable a partir de la colección especificada.

ToImmutableDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Crea un diccionario inmutable de una colección de elementos existente, aplicando una función de transformación en las claves de origen.

ToImmutableDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Crea un diccionario inmutable basado en alguna transformación de una secuencia.

ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>)

Enumera y transforma una secuencia y genera un diccionario inmutable de su contenido.

ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>)

Enumera y transforma una secuencia y genera un diccionario inmutable de su contenido mediante el comparador de claves especificado.

ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>, IEqualityComparer<TValue>)

Enumera y transforma una secuencia y genera un diccionario inmutable de su contenido mediante el comparador de claves y valores especificado.

ToImmutableHashSet<TSource>(IEnumerable<TSource>)

Enumera una secuencia y genera un conjunto hash inmutable de su contenido.

ToImmutableHashSet<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)

Enumera una secuencia, genera un conjunto hash inmutable de su contenido y usa el comparador de igualdad especificado para este tipo de conjunto.

ToImmutableList<TSource>(IEnumerable<TSource>)

Enumera una secuencia y genera una lista inmutable de su contenido.

ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>)

Enumera y transforma una secuencia y genera un diccionario ordenado inmutable de su contenido.

ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IComparer<TKey>)

Enumera y transforma una secuencia y genera un diccionario ordenado inmutable de su contenido mediante el comparador de claves especificado.

ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IComparer<TKey>, IEqualityComparer<TValue>)

Enumera y transforma una secuencia y genera un diccionario ordenador inmutable de su contenido mediante el comparador de claves y valores especificado.

ToImmutableSortedSet<TSource>(IEnumerable<TSource>)

Enumera una secuencia y genera un conjunto ordenado inmutable de su contenido.

ToImmutableSortedSet<TSource>(IEnumerable<TSource>, IComparer<TSource>)

Enumera una secuencia, genera un conjunto ordenado inmutable de su contenido y usa el comparador especificado.

CopyToDataTable<T>(IEnumerable<T>)

Devuelve un objeto DataTable que contiene copias de los objetos DataRow, dado un objeto IEnumerable<T> de entrada donde el parámetro T genérico es DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

Copia objetos DataRow en el objeto DataTable especificado, dado un objeto IEnumerable<T> de entrada donde el parámetro T genérico es DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

Copia objetos DataRow en el objeto DataTable especificado, dado un objeto IEnumerable<T> de entrada donde el parámetro T genérico es DataRow.

Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)

Aplica una función de acumulador a una secuencia.

Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)

Aplica una función de acumulador a una secuencia. El valor de inicialización especificado se utiliza como valor de inicio del acumulador.

Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)

Aplica una función de acumulador a una secuencia. El valor de inicialización especificado se utiliza como valor inicial del acumulador y la función especificada se utiliza para seleccionar el valor resultante.

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

Proporciona la clase base abstracta para una colección en la que sus claves están incrustadas en los valores.

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey,TAccumulate>, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

Proporciona la clase base abstracta para una colección en la que sus claves están incrustadas en los valores.

All<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Determina si todos los elementos de una secuencia satisfacen una condición.

Any<TSource>(IEnumerable<TSource>)

Determina si una secuencia contiene elementos.

Any<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Determina si algún elemento de una secuencia satisface una condición.

Append<TSource>(IEnumerable<TSource>, TSource)

Anexa un valor al final de la secuencia.

AsEnumerable<TSource>(IEnumerable<TSource>)

Devuelve la entrada con tipo como IEnumerable<T>.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Calcula el promedio de una secuencia de valores Decimal que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Calcula el promedio de una secuencia de valores Double que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Calcula el promedio de una secuencia de valores Int32 que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Calcula el promedio de una secuencia de valores Int64 que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Calcula el promedio de una secuencia de valores Decimal que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Calcula el promedio de una secuencia de valores Double que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Calcula el promedio de una secuencia de valores Int32 que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Calcula el promedio de una secuencia de valores Int64 que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Calcula el promedio de una secuencia de valores Single que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Calcula el promedio de una secuencia de valores Single que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Cast<TResult>(IEnumerable)

Convierte los elementos de IEnumerable en el tipo especificado.

Chunk<TSource>(IEnumerable<TSource>, Int32)

Divide los elementos de una secuencia en fragmentos de tamaño como máximo size.

Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Concatena dos secuencias.

Contains<TSource>(IEnumerable<TSource>, TSource)

Determina si una secuencia contiene un elemento especificado utilizando el comparador de igualdad predeterminado.

Contains<TSource>(IEnumerable<TSource>, TSource, IEqualityComparer<TSource>)

Determina si una secuencia contiene un elemento especificado utilizando un objeto IEqualityComparer<T> determinado.

Count<TSource>(IEnumerable<TSource>)

Devuelve el número de elementos de una secuencia.

Count<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve un número que representa cuántos elementos de la secuencia especificada satisfacen una condición.

CountBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Proporciona la clase base abstracta para una colección en la que sus claves están incrustadas en los valores.

DefaultIfEmpty<TSource>(IEnumerable<TSource>)

Devuelve los elementos de la secuencia especificada o el valor predeterminado del parámetro de tipo en una colección singleton si la secuencia está vacía.

DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource)

Devuelve los elementos de la secuencia especificada o el valor especificado en una colección singleton si la secuencia está vacía.

Distinct<TSource>(IEnumerable<TSource>)

Devuelve diversos elementos de una secuencia utilizando el comparador de igualdad predeterminado para comparar los valores.

Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)

Devuelve diversos elementos de una secuencia utilizando un objeto IEqualityComparer<T> especificado para comparar los valores.

DistinctBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Devuelve distintos elementos de una secuencia según una función de selector de claves especificada.

DistinctBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Devuelve distintos elementos de una secuencia según una función del selector de claves especificada y utilizando un comparador especificado para comparar las claves.

ElementAt<TSource>(IEnumerable<TSource>, Index)

Devuelve el elemento situado en un índice especificado de una secuencia.

ElementAt<TSource>(IEnumerable<TSource>, Int32)

Devuelve el elemento situado en un índice especificado de una secuencia.

ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index)

Devuelve el elemento situado en un índice especificado de una secuencia o un valor predeterminado si el índice está fuera del intervalo.

ElementAtOrDefault<TSource>(IEnumerable<TSource>, Int32)

Devuelve el elemento situado en un índice especificado de una secuencia o un valor predeterminado si el índice está fuera del intervalo.

Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Proporciona la diferencia de conjuntos de dos secuencias utilizando el comparador de igualdad predeterminado para comparar los valores.

Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Proporciona la diferencia de conjuntos de dos secuencias utilizando el objeto IEqualityComparer<T> especificado para comparar los valores.

ExceptBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>)

Genera la diferencia de conjunto de dos secuencias según una función de selector de claves especificada.

ExceptBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Genera la diferencia de conjunto de dos secuencias según una función de selector de claves especificada.

First<TSource>(IEnumerable<TSource>)

Devuelve el primer elemento de una secuencia.

First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve el primer elemento de una secuencia que satisface una condición especificada.

FirstOrDefault<TSource>(IEnumerable<TSource>)

Devuelve el primer elemento de una secuencia o un valor predeterminado si la secuencia no contiene elementos.

FirstOrDefault<TSource>(IEnumerable<TSource>, TSource)

Devuelve el primer elemento de una secuencia o un valor predeterminado especificado si la secuencia no contiene ningún elemento.

FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve el primer elemento de la secuencia que satisface una condición o un valor predeterminado si no se encuentra dicho elemento.

FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)

Devuelve el primer elemento de la secuencia que satisface una condición o un valor predeterminado especificado si no se encuentra ningún elemento de este tipo.

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada.

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada y compara las claves utilizando un comparador especificado.

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada y proyecta los elementos de cada grupo utilizando una función determinada.

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Agrupa los elementos de una secuencia conforme a una función del selector de claves. Las claves se comparan utilizando un comparador y los elementos de cada grupo se proyectan utilizando una función especificada.

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave.

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Las claves se comparan utilizando un comparador especificado.

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los elementos de cada grupo se proyectan utilizando una función determinada.

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)

Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los valores de las claves se comparan utilizando un comparador especificado y los elementos de cada grupo se proyectan utilizando una función especificada.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

Establece una correlación entre los elementos de dos secuencias en función de la igualdad de sus claves y agrupa los resultados. El comparador de igualdad predeterminado se usa para comparar claves.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

Establece una correlación entre los elementos de dos secuencias basándose en la igualdad de clave y agrupa los resultados. Se usa un IEqualityComparer<T> especificado para comparar claves.

Index<TSource>(IEnumerable<TSource>)

Proporciona la clase base abstracta para una colección en la que sus claves están incrustadas en los valores.

Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Proporciona la intersección de conjuntos de dos secuencias utilizando el comparador de igualdad predeterminado para comparar los valores.

Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Proporciona la intersección de conjuntos de dos secuencias utilizando el objeto IEqualityComparer<T> especificado para comparar los valores.

IntersectBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>)

Genera la intersección de conjunto de dos secuencias según una función de selector de claves especificada.

IntersectBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Genera la intersección de conjunto de dos secuencias según una función de selector de claves especificada.

Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>)

Establece la correlación de dos secuencias basándose en claves coincidentes. El comparador de igualdad predeterminado se usa para comparar claves.

Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

Establece la correlación de dos secuencias basándose en claves coincidentes. Se usa un IEqualityComparer<T> especificado para comparar claves.

Last<TSource>(IEnumerable<TSource>)

Devuelve el último elemento de una secuencia.

Last<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve el último elemento de una secuencia que satisface una condición especificada.

LastOrDefault<TSource>(IEnumerable<TSource>)

Devuelve el último elemento de una secuencia o un valor predeterminado si la secuencia no contiene elementos.

LastOrDefault<TSource>(IEnumerable<TSource>, TSource)

Devuelve el último elemento de una secuencia o un valor predeterminado especificado si la secuencia no contiene ningún elemento.

LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve el último elemento de una secuencia que satisface una condición o un valor predeterminado si no se encuentra dicho elemento.

LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)

Devuelve el último elemento de una secuencia que satisface una condición o un valor predeterminado especificado si no se encuentra ningún elemento de este tipo.

LongCount<TSource>(IEnumerable<TSource>)

Devuelve un valor Int64 que representa el número total de elementos de una secuencia.

LongCount<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve un valor Int64 que representa el número de elementos de una secuencia que satisfacen una condición.

Max<TSource>(IEnumerable<TSource>)

Devuelve el valor máximo de una secuencia genérica.

Max<TSource>(IEnumerable<TSource>, IComparer<TSource>)

Devuelve el valor máximo de una secuencia genérica.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Decimal máximo.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Double máximo.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int32 máximo.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int64 máximo.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Decimal máximo que acepta valores NULL.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Double máximo que acepta valores NULL.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int32 máximo que acepta valores NULL.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int64 máximo que acepta valores NULL.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Single máximo que acepta valores NULL.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Single máximo.

Max<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Invoca una función de transformación en cada elemento de una secuencia genérica y devuelve el valor máximo resultante.

MaxBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Devuelve el valor máximo de una secuencia genérica según una función de selector de claves especificada.

MaxBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Devuelve el valor máximo de una secuencia genérica según una función de selector de claves y un comparador de claves especificados.

Min<TSource>(IEnumerable<TSource>)

Devuelve el valor mínimo de una secuencia genérica.

Min<TSource>(IEnumerable<TSource>, IComparer<TSource>)

Devuelve el valor mínimo de una secuencia genérica.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Decimal mínimo.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Double mínimo.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int32 mínimo.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int64 mínimo.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Decimal mínimo que acepta valores NULL.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Double mínimo que acepta valores NULL.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int32 mínimo que acepta valores NULL.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Int64 mínimo que acepta valores NULL.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Single mínimo que acepta valores NULL.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Invoca una función de transformación en cada elemento de una secuencia y devuelve el valor Single mínimo.

Min<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Invoca una función de transformación en cada elemento de una secuencia genérica y devuelve el valor mínimo resultante.

MinBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Devuelve el valor mínimo de una secuencia genérica según una función de selector de claves especificada.

MinBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Devuelve el valor mínimo de una secuencia genérica según una función de selector de claves y un comparador de claves especificados.

OfType<TResult>(IEnumerable)

Filtra los elementos de IEnumerable en función de un tipo especificado.

Order<T>(IEnumerable<T>)

Ordena de manera ascendente los elementos de una secuencia.

Order<T>(IEnumerable<T>, IComparer<T>)

Ordena de manera ascendente los elementos de una secuencia.

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Ordena de manera ascendente los elementos de una secuencia en función de una clave.

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Ordena de manera ascendente los elementos de una secuencia utilizando un comparador especificado.

OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Ordena de manera descendente los elementos de una secuencia en función de una clave.

OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Ordena de manera descendente los elementos de una secuencia utilizando un comparador especificado.

OrderDescending<T>(IEnumerable<T>)

Ordena de manera descendente los elementos de una secuencia.

OrderDescending<T>(IEnumerable<T>, IComparer<T>)

Ordena de manera descendente los elementos de una secuencia.

Prepend<TSource>(IEnumerable<TSource>, TSource)

Agrega un valor al principio de la secuencia.

Reverse<TSource>(IEnumerable<TSource>)

Invierte el orden de los elementos de una secuencia.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Proyecta cada elemento de una secuencia a un nuevo formulario.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)

Proyecta cada elemento de una secuencia en un nuevo formulario incorporando el índice del elemento.

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>)

Proyecta cada elemento de una secuencia en una interfaz IEnumerable<T> y reduce las secuencias resultantes en una secuencia.

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>)

Proyecta cada elemento de una secuencia en una interfaz IEnumerable<T> y reduce las secuencias resultantes en una secuencia. El índice de cada elemento de origen se utiliza en el formulario proyectado de ese elemento.

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Proyecta cada elemento de una secuencia en IEnumerable<T>, reduce las secuencias resultantes en una única secuencia e invoca una función del selector de resultados en cada elemento.

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Proyecta cada elemento de una secuencia en IEnumerable<T>, reduce las secuencias resultantes en una única secuencia e invoca una función del selector de resultados en cada elemento. El índice de cada elemento de origen se utiliza en el formulario proyectado intermedio de ese elemento.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Determina si dos secuencias son iguales; para ello, se comparan sus elementos mediante el comparador de igualdad predeterminado para su tipo.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Determina si dos secuencias son iguales; para ello, compara sus elementos utilizando una interfaz IEqualityComparer<T> especificada.

Single<TSource>(IEnumerable<TSource>)

Devuelve el único elemento de una secuencia y produce una excepción si no hay exactamente un elemento en la secuencia.

Single<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve el único elemento de una secuencia que cumpla una condición especificada y produce una excepción si existe más de un elemento de este tipo.

SingleOrDefault<TSource>(IEnumerable<TSource>)

Devuelve el único elemento de una secuencia o un valor predeterminado si la secuencia está vacía; este método produce una excepción si hay más de un elemento en la secuencia.

SingleOrDefault<TSource>(IEnumerable<TSource>, TSource)

Devuelve el único elemento de una secuencia o un valor predeterminado especificado si la secuencia está vacía; Este método produce una excepción si hay más de un elemento en la secuencia.

SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve el único elemento de una secuencia que cumpla la condición especificada, o bien, un valor predeterminado si ese elemento no existe; este método produce una excepción si varios elementos cumplen la condición.

SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)

Devuelve el único elemento de una secuencia que satisface una condición especificada o un valor predeterminado especificado si no existe dicho elemento; Este método produce una excepción si más de un elemento cumple la condición.

Skip<TSource>(IEnumerable<TSource>, Int32)

Omite un número especificado de elementos en una secuencia y luego devuelve los elementos restantes.

SkipLast<TSource>(IEnumerable<TSource>, Int32)

Devuelve una nueva colección que contiene los elementos de source con los últimos elementos de count de la colección de origen omitida.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Omite los elementos de una secuencia en tanto que el valor de una condición especificada sea true y luego devuelve los elementos restantes.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

Omite los elementos de una secuencia en tanto que el valor de una condición especificada sea true y luego devuelve los elementos restantes. El índice del elemento se usa en la lógica de la función de predicado.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Calcula la suma de una secuencia de valores Decimal que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Calcula la suma de una secuencia de valores Double que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Calcula la suma de una secuencia de valores Int32 que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Calcula la suma de una secuencia de valores Int64 que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Calcula la suma de una secuencia de valores Decimal que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Calcula la suma de una secuencia de valores Double que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Calcula la suma de una secuencia de valores Int32 que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Calcula la suma de una secuencia de valores Int64 que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Calcula la suma de una secuencia de valores Single que aceptan valores NULL que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Calcula la suma de una secuencia de valores Single que se obtiene al invocar una función de transformación en cada elemento de la secuencia de entrada.

Take<TSource>(IEnumerable<TSource>, Int32)

Devuelve un número especificado de elementos contiguos desde el principio de una secuencia.

Take<TSource>(IEnumerable<TSource>, Range)

Devuelve un intervalo especificado de elementos contiguos de una secuencia.

TakeLast<TSource>(IEnumerable<TSource>, Int32)

Devuelve una nueva colección enumerable que contiene los últimos elementos count de source.

TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devuelve los elementos de una secuencia en tanto que el valor de una condición especificada sea true.

TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

Devuelve los elementos de una secuencia en tanto que el valor de una condición especificada sea true. El índice del elemento se usa en la lógica de la función de predicado.

ToArray<TSource>(IEnumerable<TSource>)

Crea una matriz a partir de un IEnumerable<T>.

ToDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Crea una clase Dictionary<TKey,TValue> a partir de una interfaz IEnumerable<T> según una función del selector de claves especificada.

ToDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Crea un objeto Dictionary<TKey,TValue> a partir de un objeto IEnumerable<T> según una función del selector de claves especificada y el comparador de claves.

ToDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Crea un objeto Dictionary<TKey,TValue> a partir de un objeto IEnumerable<T> según el selector de claves especificado y las funciones del selector de elementos.

ToDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Crea un objeto Dictionary<TKey,TValue> a partir de un objeto IEnumerable<T> según una función del selector de claves especificada, un comparador y una función del selector de elementos.

ToHashSet<TSource>(IEnumerable<TSource>)

Crea un HashSet<T> a partir de un IEnumerable<T>.

ToHashSet<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)

Crea un objeto HashSet<T> a partir de una instancia de IEnumerable<T> mediante comparer para comparar claves.

ToList<TSource>(IEnumerable<TSource>)

Crea un List<T> a partir de un IEnumerable<T>.

ToLookup<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Crea una clase Lookup<TKey,TElement> a partir de una interfaz IEnumerable<T> según una función del selector de claves especificada.

ToLookup<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Crea un objeto Lookup<TKey,TElement> a partir de un objeto IEnumerable<T> según una función del selector de claves especificada y el comparador de claves.

ToLookup<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Crea un objeto Lookup<TKey,TElement> a partir de un objeto IEnumerable<T> según el selector de claves especificado y las funciones del selector de elementos.

ToLookup<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Crea un objeto Lookup<TKey,TElement> a partir de un objeto IEnumerable<T> según una función del selector de claves, un comparador y una función del selector de elementos especificados.

TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32)

Intenta determinar el número de elementos de una secuencia sin forzar una enumeración.

Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Proporciona la unión de conjuntos de dos secuencias utilizando el comparador de igualdad predeterminado.

Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Proporciona la unión de conjuntos de dos secuencias a través de un objeto IEqualityComparer<T> especificado.

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>)

Genera la unión de conjunto de dos secuencias según una función de selector de claves especificada.

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Genera la unión de conjunto de dos secuencias según una función de selector de claves especificada.

Where<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Filtra una secuencia de valores en función de un predicado.

Where<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

Filtra una secuencia de valores en función de un predicado. El índice de cada elemento se usa en la lógica de la función de predicado.

Zip<TFirst,TSecond>(IEnumerable<TFirst>, IEnumerable<TSecond>)

Genera una secuencia de tuplas con elementos a partir de las dos secuencias especificadas.

Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>)

Genera una secuencia de tuplas con elementos de las tres secuencias especificadas.

Zip<TFirst,TSecond,TResult>(IEnumerable<TFirst>, IEnumerable<TSecond>, Func<TFirst,TSecond,TResult>)

Aplica la función especificada a los elementos correspondientes de dos secuencias, lo que genera una secuencia de resultados.

AsParallel(IEnumerable)

Habilita la paralelización de una consulta.

AsParallel<TSource>(IEnumerable<TSource>)

Habilita la paralelización de una consulta.

AsQueryable(IEnumerable)

Convierte una interfaz IEnumerable en IQueryable.

AsQueryable<TElement>(IEnumerable<TElement>)

Convierte un parámetro IEnumerable<T> genérico en un parámetro IQueryable<T> genérico.

Ancestors<T>(IEnumerable<T>)

Devuelve una colección de elementos que contiene los antecesores de todos los nodos de la colección de origen.

Ancestors<T>(IEnumerable<T>, XName)

Devuelve una colección de elementos filtrada que contiene los antecesores de todos los nodos de la colección de origen. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.

DescendantNodes<T>(IEnumerable<T>)

Devuelve una colección de los nodos descendientes de todos los documentos y elementos de la colección de origen.

Descendants<T>(IEnumerable<T>)

Devuelve una colección de elementos que contiene los elementos descendientes de todos los elementos y documentos de la colección de origen.

Descendants<T>(IEnumerable<T>, XName)

Devuelve una colección filtrada de elementos que contiene los elementos descendientes de todos los elementos y documentos de la colección de origen. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.

Elements<T>(IEnumerable<T>)

Devuelve una colección de los elementos secundarios de todos los elementos y documentos de la colección de origen.

Elements<T>(IEnumerable<T>, XName)

Devuelve una colección filtrada de los elementos secundarios de todos los elementos y documentos de la colección de origen. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.

InDocumentOrder<T>(IEnumerable<T>)

Devuelve una colección de nodos que contiene todos los nodos de la colección de origen, clasificados por documento.

Nodes<T>(IEnumerable<T>)

Devuelve una colección de los nodos secundarios de todos los documentos y elementos de la colección de origen.

Remove<T>(IEnumerable<T>)

Quita todos los nodos de la colección de origen de su nodo primario.

Se aplica a

Consulte también