KeyedCollection<TKey,TItem> Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece a classe base abstrata para uma coleção cujas chaves são inseridas nos 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
O tipo de chaves na coleção.
- TItem
O tipo de itens na coleção.
- Herança
- Derivado
- Atributos
Exemplos
Esta seção contém dois exemplos de código. O primeiro exemplo mostra o código mínimo necessário para derivar de KeyedCollection<TKey,TItem>e demonstra muitos dos métodos herdados. O segundo exemplo mostra como substituir os métodos protegidos de KeyedCollection<TKey,TItem> para fornecer comportamento personalizado.
exemplo 1
Este exemplo de código mostra o código mínimo necessário para derivar uma classe de coleção de KeyedCollection<TKey,TItem>: substituindo o método GetKeyForItem e fornecendo um construtor público que delega a um construtor de classe base. O exemplo de código também demonstra muitas das propriedades e métodos herdados de classes KeyedCollection<TKey,TItem> e Collection<T>.
A classe SimpleOrder
é uma lista de requisição muito simples que contém objetos OrderItem
, cada um deles representa um item de linha na ordem. A chave de OrderItem
é imutável, uma consideração importante para classes que derivam de KeyedCollection<TKey,TItem>. Para obter um exemplo de código que usa chaves mutáveis, consulte 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
Exemplo 2
O exemplo de código a seguir mostra como substituir os métodos protegidos InsertItem, RemoveItem, ClearItemse SetItem, para fornecer comportamento personalizado para os métodos Add, Removee Clear e para definir a propriedade Item[] padrão (o indexador em C#). O comportamento personalizado fornecido neste exemplo é um evento de notificação chamado Changed
, que é gerado no final de cada um dos métodos substituídos.
O exemplo de código cria a classe SimpleOrder
, que deriva de KeyedCollection<TKey,TItem> e representa um formulário de ordem simples. O formulário de pedido contém OrderItem
objetos que representam itens ordenados. O exemplo de código também cria uma classe SimpleOrderChangedEventArgs
para conter as informações do evento e uma enumeração para identificar o tipo de alteração.
O exemplo de código demonstra o comportamento personalizado chamando as propriedades e os métodos da classe derivada, no método Main
da classe Demo
.
Este exemplo de código usa objetos com chaves imutáveis. Para obter um exemplo de código que usa chaves mutáveis, consulte 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.
Comentários
A classe KeyedCollection<TKey,TItem> fornece recuperação indexada O(1) e recuperação com chave que se aproxima de O(1). É um tipo abstrato ou, mais precisamente, um conjunto infinito de tipos abstratos, pois cada um de seus tipos genéricos construídos é uma classe base abstrata. Para usar KeyedCollection<TKey,TItem>, derive seu tipo de coleção do tipo construído apropriado.
A classe KeyedCollection<TKey,TItem> é um híbrido entre uma coleção com base na interface genérica IList<T> e uma coleção baseada na interface genérica IDictionary<TKey,TValue>. Como coleções baseadas na interface genérica IList<T>, KeyedCollection<TKey,TItem> é uma lista indexada de itens. Como coleções baseadas na interface genérica IDictionary<TKey,TValue>, KeyedCollection<TKey,TItem> tem uma chave associada a cada elemento.
Ao contrário dos dicionários, um elemento de KeyedCollection<TKey,TItem> não é um par chave/valor; em vez disso, o elemento inteiro é o valor e a chave é inserida dentro do valor. Por exemplo, um elemento de uma coleção derivada de KeyedCollection\<String,String>
(KeyedCollection(Of String, String)
no Visual Basic) pode ser "John Doe Jr." onde o valor é "John Doe Jr." e a chave é "Doe"; ou uma coleção de registros de funcionários que contêm chaves inteiros pode ser derivada de KeyedCollection\<int,Employee>
. O método de GetKeyForItem abstrato extrai a chave do elemento.
Por padrão, o KeyedCollection<TKey,TItem> inclui um dicionário de pesquisa que você pode obter com a propriedade Dictionary. Quando um item é adicionado ao KeyedCollection<TKey,TItem>, a chave do item é extraída uma vez e salva no dicionário de pesquisa para pesquisas mais rápidas. Esse comportamento é substituído especificando um limite de criação de dicionário quando você cria o KeyedCollection<TKey,TItem>. O dicionário de pesquisa é criado na primeira vez que o número de elementos excede esse limite. Se você especificar -1 como o limite, o dicionário de pesquisa nunca será criado.
Nota
Quando o dicionário de pesquisa interno é usado, ele contém referências a todos os itens da coleção se TItem
for um tipo de referência ou cópias de todos os itens da coleção se TItem
for um tipo de valor. Portanto, usar o dicionário de pesquisa pode não ser apropriado se TItem
for um tipo de valor.
Você pode acessar um item por seu índice ou chave usando a propriedade Item[]. Você pode adicionar itens sem uma chave, mas esses itens podem ser acessados posteriormente apenas por índice.
Construtores
KeyedCollection<TKey,TItem>() |
Inicializa uma nova instância da classe KeyedCollection<TKey,TItem> que usa o comparador de igualdade padrão. |
KeyedCollection<TKey,TItem>(IEqualityComparer<TKey>) |
Inicializa uma nova instância da classe KeyedCollection<TKey,TItem> que usa o comparador de igualdade especificado. |
KeyedCollection<TKey,TItem>(IEqualityComparer<TKey>, Int32) |
Inicializa uma nova instância da classe KeyedCollection<TKey,TItem> que usa o comparador de igualdade especificado e cria um dicionário de pesquisa quando o limite especificado é excedido. |
Propriedades
Comparer |
Obtém o comparador de igualdade genérico usado para determinar a igualdade de chaves na coleção. |
Count |
Obtém o número de elementos realmente contidos no Collection<T>. (Herdado de Collection<T>) |
Dictionary |
Obtém o dicionário de pesquisa do KeyedCollection<TKey,TItem>. |
Item[Int32] |
Obtém ou define o elemento no índice especificado. (Herdado de Collection<T>) |
Item[TKey] |
Obtém o elemento com a chave especificada. |
Items |
Obtém um wrapper de IList<T> ao redor do Collection<T>. (Herdado de Collection<T>) |
Métodos
Add(T) |
Adiciona um objeto ao final do Collection<T>. (Herdado de Collection<T>) |
ChangeItemKey(TItem, TKey) |
Altera a chave associada ao elemento especificado no dicionário de pesquisa. |
Clear() |
Remove todos os elementos do Collection<T>. (Herdado de Collection<T>) |
ClearItems() |
Remove todos os elementos do KeyedCollection<TKey,TItem>. |
Contains(TKey) |
Determina se a coleção contém um elemento com a chave especificada. |
CopyTo(T[], Int32) |
Copia todo o Collection<T> para um Arrayunidimensional compatível, começando no índice especificado da matriz de destino. (Herdado de Collection<T>) |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetEnumerator() |
Retorna um enumerador que itera por meio do Collection<T>. (Herdado de Collection<T>) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetKeyForItem(TItem) |
Quando implementado em uma classe derivada, extrai a chave do elemento especificado. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
IndexOf(T) |
Pesquisa o objeto especificado e retorna o índice baseado em zero da primeira ocorrência em todo o Collection<T>. (Herdado de Collection<T>) |
Insert(Int32, T) |
Insere um elemento no Collection<T> no índice especificado. (Herdado de Collection<T>) |
InsertItem(Int32, T) |
Insere um elemento no Collection<T> no índice especificado. (Herdado de Collection<T>) |
InsertItem(Int32, TItem) |
Insere um elemento no KeyedCollection<TKey,TItem> no índice especificado. |
MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
Remove(TKey) |
Remove o elemento com a chave especificada do KeyedCollection<TKey,TItem>. |
RemoveAt(Int32) |
Remove o elemento no índice especificado do Collection<T>. (Herdado de Collection<T>) |
RemoveItem(Int32) |
Remove o elemento no índice especificado do KeyedCollection<TKey,TItem>. |
SetItem(Int32, T) |
Substitui o elemento no índice especificado. (Herdado de Collection<T>) |
SetItem(Int32, TItem) |
Substitui o item no índice especificado pelo item especificado. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
TryGetValue(TKey, TItem) |
Tenta obter um item da coleção usando a chave especificada. |
Implantações explícitas de interface
ICollection.CopyTo(Array, Int32) |
Copia os elementos do ICollection para um Array, começando em um índice Array específico. (Herdado de Collection<T>) |
ICollection.IsSynchronized |
Obtém um valor que indica se o acesso ao ICollection é sincronizado (thread safe). (Herdado de Collection<T>) |
ICollection.SyncRoot |
Obtém um objeto que pode ser usado para sincronizar o acesso ao ICollection. (Herdado de Collection<T>) |
ICollection<T>.IsReadOnly |
Obtém um valor que indica se o ICollection<T> é somente leitura. (Herdado de Collection<T>) |
IEnumerable.GetEnumerator() |
Retorna um enumerador que itera por meio de uma coleção. (Herdado de Collection<T>) |
IList.Add(Object) |
Adiciona um item ao IList. (Herdado de Collection<T>) |
IList.Contains(Object) |
Determina se o IList contém um valor específico. (Herdado de Collection<T>) |
IList.IndexOf(Object) |
Determina o índice de um item específico no IList. (Herdado de Collection<T>) |
IList.Insert(Int32, Object) |
Insere um item no IList no índice especificado. (Herdado de Collection<T>) |
IList.IsFixedSize |
Obtém um valor que indica se o IList tem um tamanho fixo. (Herdado de Collection<T>) |
IList.IsReadOnly |
Obtém um valor que indica se o IList é somente leitura. (Herdado de Collection<T>) |
IList.Item[Int32] |
Obtém ou define o elemento no índice especificado. (Herdado de Collection<T>) |
IList.Remove(Object) |
Remove a primeira ocorrência de um objeto específico do IList. (Herdado de Collection<T>) |
Métodos de Extensão
ToFrozenDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Cria um FrozenDictionary<TKey,TValue> de uma IEnumerable<T> de acordo com a função de seletor de chave especificada. |
ToFrozenDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) |
Cria um FrozenDictionary<TKey,TValue> de uma IEnumerable<T> de acordo com as funções de seletor de elemento e seletor de elemento especificadas. |
ToFrozenSet<T>(IEnumerable<T>, IEqualityComparer<T>) |
Cria um FrozenSet<T> com os valores especificados. |
AsReadOnly<T>(IList<T>) |
Retorna um wrapper de ReadOnlyCollection<T> somente leitura para a lista especificada. |
ToImmutableArray<TSource>(IEnumerable<TSource>) |
Cria uma matriz imutável da coleção especificada. |
ToImmutableDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Constrói um dicionário imutável a partir de uma coleção existente de elementos, aplicando uma função de transformação às chaves de origem. |
ToImmutableDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Constrói um dicionário imutável com base em alguma transformação de uma sequência. |
ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>) |
Enumera e transforma uma sequência e produz um dicionário imutável de seu conteúdo. |
ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>) |
Enumera e transforma uma sequência e produz um dicionário imutável de seu conteúdo usando o comparador de chave especificado. |
ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>, IEqualityComparer<TValue>) |
Enumera e transforma uma sequência e produz um dicionário imutável de seu conteúdo usando os comparadores de chave e valor especificados. |
ToImmutableHashSet<TSource>(IEnumerable<TSource>) |
Enumera uma sequência e produz um conjunto de hash imutável de seu conteúdo. |
ToImmutableHashSet<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) |
Enumera uma sequência, produz um conjunto de hash imutável de seu conteúdo e usa o comparador de igualdade especificado para o tipo de conjunto. |
ToImmutableList<TSource>(IEnumerable<TSource>) |
Enumera uma sequência e produz uma lista imutável de seu conteúdo. |
ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>) |
Enumera e transforma uma sequência e produz um dicionário classificado imutável de seu conteúdo. |
ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IComparer<TKey>) |
Enumera e transforma uma sequência e produz um dicionário classificado imutável de seu conteúdo usando o comparador de chave especificado. |
ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IComparer<TKey>, IEqualityComparer<TValue>) |
Enumera e transforma uma sequência e produz um dicionário classificado imutável de seu conteúdo usando os comparadores de chave e valor especificados. |
ToImmutableSortedSet<TSource>(IEnumerable<TSource>) |
Enumera uma sequência e produz um conjunto classificado imutável de seu conteúdo. |
ToImmutableSortedSet<TSource>(IEnumerable<TSource>, IComparer<TSource>) |
Enumera uma sequência, produz um conjunto classificado imutável de seu conteúdo e usa o comparador especificado. |
CopyToDataTable<T>(IEnumerable<T>) |
Retorna um DataTable que contém cópias dos objetos DataRow, dado um objeto de IEnumerable<T> de entrada em que o parâmetro genérico |
CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) |
Copia DataRow objetos para o DataTableespecificado, considerando um objeto de IEnumerable<T> de entrada em que o parâmetro genérico |
CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) |
Copia DataRow objetos para o DataTableespecificado, considerando um objeto de IEnumerable<T> de entrada em que o parâmetro genérico |
Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) |
Aplica uma função de acumulador em uma sequência. |
Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) |
Aplica uma função de acumulador em uma sequência. O valor de semente especificado é usado como o valor inicial do acumulador. |
Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>) |
Aplica uma função de acumulador em uma sequência. O valor de semente especificado é usado como o valor inicial do acumulador e a função especificada é usada para selecionar o valor do resultado. |
AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>) |
Fornece a classe base abstrata para uma coleção cujas chaves são inseridas nos valores. |
AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey,TAccumulate>, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>) |
Fornece a classe base abstrata para uma coleção cujas chaves são inseridas nos valores. |
All<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Determina se todos os elementos de uma sequência atendem a uma condição. |
Any<TSource>(IEnumerable<TSource>) |
Determina se uma sequência contém elementos. |
Any<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Determina se qualquer elemento de uma sequência satisfaz uma condição. |
Append<TSource>(IEnumerable<TSource>, TSource) |
Acrescenta um valor ao final da sequência. |
AsEnumerable<TSource>(IEnumerable<TSource>) |
Retorna a entrada digitada como IEnumerable<T>. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>) |
Calcula a média de uma sequência de valores Decimal obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Double>) |
Calcula a média de uma sequência de valores Double obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Int32>) |
Calcula a média de uma sequência de valores Int32 obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Int64>) |
Calcula a média de uma sequência de valores Int64 obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>) |
Calcula a média de uma sequência de valores Decimal anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>) |
Calcula a média de uma sequência de valores Double anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>) |
Calcula a média de uma sequência de valores Int32 anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>) |
Calcula a média de uma sequência de valores Int64 anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>) |
Calcula a média de uma sequência de valores Single anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Average<TSource>(IEnumerable<TSource>, Func<TSource,Single>) |
Calcula a média de uma sequência de valores Single obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Cast<TResult>(IEnumerable) |
Converte os elementos de um IEnumerable para o tipo especificado. |
Chunk<TSource>(IEnumerable<TSource>, Int32) |
Divide os elementos de uma sequência em partes de tamanho no máximo |
Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) |
Concatena duas sequências. |
Contains<TSource>(IEnumerable<TSource>, TSource) |
Determina se uma sequência contém um elemento especificado usando o comparador de igualdade padrão. |
Contains<TSource>(IEnumerable<TSource>, TSource, IEqualityComparer<TSource>) |
Determina se uma sequência contém um elemento especificado usando um IEqualityComparer<T>especificado. |
Count<TSource>(IEnumerable<TSource>) |
Retorna o número de elementos em uma sequência. |
Count<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna um número que representa quantos elementos na sequência especificada atendem a uma condição. |
CountBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Fornece a classe base abstrata para uma coleção cujas chaves são inseridas nos valores. |
DefaultIfEmpty<TSource>(IEnumerable<TSource>) |
Retorna os elementos da sequência especificada ou o valor padrão do parâmetro de tipo em uma coleção singleton se a sequência estiver vazia. |
DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) |
Retorna os elementos da sequência especificada ou o valor especificado em uma coleção singleton se a sequência estiver vazia. |
Distinct<TSource>(IEnumerable<TSource>) |
Retorna elementos distintos de uma sequência usando o comparador de igualdade padrão para comparar valores. |
Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) |
Retorna elementos distintos de uma sequência usando um IEqualityComparer<T> especificado para comparar valores. |
DistinctBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Retorna elementos distintos de uma sequência de acordo com uma função de seletor de chave especificada. |
DistinctBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Retorna elementos distintos de uma sequência de acordo com uma função de seletor de chave especificada e usando um comparador especificado para comparar chaves. |
ElementAt<TSource>(IEnumerable<TSource>, Index) |
Retorna o elemento em um índice especificado em uma sequência. |
ElementAt<TSource>(IEnumerable<TSource>, Int32) |
Retorna o elemento em um índice especificado em uma sequência. |
ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) |
Retorna o elemento em um índice especificado em uma sequência ou um valor padrão se o índice estiver fora do intervalo. |
ElementAtOrDefault<TSource>(IEnumerable<TSource>, Int32) |
Retorna o elemento em um índice especificado em uma sequência ou um valor padrão se o índice estiver fora do intervalo. |
Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) |
Produz a diferença de conjunto de duas sequências usando o comparador de igualdade padrão para comparar valores. |
Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) |
Produz a diferença de conjunto de duas sequências usando a IEqualityComparer<T> especificada para comparar valores. |
ExceptBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>) |
Produz a diferença de conjunto de duas sequências de acordo com uma função de seletor de chave especificada. |
ExceptBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Produz a diferença de conjunto de duas sequências de acordo com uma função de seletor de chave especificada. |
First<TSource>(IEnumerable<TSource>) |
Retorna o primeiro elemento de uma sequência. |
First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna o primeiro elemento em uma sequência que satisfaz uma condição especificada. |
FirstOrDefault<TSource>(IEnumerable<TSource>) |
Retorna o primeiro elemento de uma sequência ou um valor padrão se a sequência não contiver elementos. |
FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) |
Retorna o primeiro elemento de uma sequência ou um valor padrão especificado se a sequência não contiver elementos. |
FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna o primeiro elemento da sequência que satisfaz uma condição ou um valor padrão se nenhum elemento desse tipo for encontrado. |
FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource) |
Retorna o primeiro elemento da sequência que satisfaz uma condição ou um valor padrão especificado se nenhum elemento desse tipo for encontrado. |
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada. |
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada e compara as chaves usando um comparador especificado. |
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada e projeta os elementos para cada grupo usando uma função especificada. |
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave. As chaves são comparadas usando um comparador e os elementos de cada grupo são projetados usando uma função especificada. |
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. |
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. As chaves são comparadas usando um comparador especificado. |
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. Os elementos de cada grupo são projetados usando uma função especificada. |
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. Os valores de chave são comparados usando um comparador especificado e os elementos de cada grupo são projetados usando uma função especificada. |
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) |
Correlaciona os elementos de duas sequências com base na igualdade de chaves e agrupa os resultados. O comparador de igualdade padrão é usado para comparar chaves. |
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>) |
Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados. Um IEqualityComparer<T> especificado é usado para comparar chaves. |
Index<TSource>(IEnumerable<TSource>) |
Retorna um enumerável que incorpora o índice do elemento em uma tupla. |
Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) |
Produz a interseção definida de duas sequências usando o comparador de igualdade padrão para comparar valores. |
Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) |
Produz a interseção definida de duas sequências usando a IEqualityComparer<T> especificada para comparar valores. |
IntersectBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>) |
Produz a interseção definida de duas sequências de acordo com uma função de seletor de chave especificada. |
IntersectBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Produz a interseção definida de duas sequências de acordo com uma função de seletor de chave especificada. |
Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) |
Correlaciona os elementos de duas sequências com base em chaves correspondentes. O comparador de igualdade padrão é usado para comparar chaves. |
Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>) |
Correlaciona os elementos de duas sequências com base em chaves correspondentes. Um IEqualityComparer<T> especificado é usado para comparar chaves. |
Last<TSource>(IEnumerable<TSource>) |
Retorna o último elemento de uma sequência. |
Last<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna o último elemento de uma sequência que satisfaz uma condição especificada. |
LastOrDefault<TSource>(IEnumerable<TSource>) |
Retorna o último elemento de uma sequência ou um valor padrão se a sequência não contiver elementos. |
LastOrDefault<TSource>(IEnumerable<TSource>, TSource) |
Retorna o último elemento de uma sequência ou um valor padrão especificado se a sequência não contiver elementos. |
LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna o último elemento de uma sequência que satisfaz uma condição ou um valor padrão se nenhum elemento desse tipo for encontrado. |
LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource) |
Retorna o último elemento de uma sequência que satisfaz uma condição ou um valor padrão especificado se nenhum elemento desse tipo for encontrado. |
LongCount<TSource>(IEnumerable<TSource>) |
Retorna um Int64 que representa o número total de elementos em uma sequência. |
LongCount<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna um Int64 que representa quantos elementos em uma sequência atendem a uma condição. |
Max<TSource>(IEnumerable<TSource>) |
Retorna o valor máximo em uma sequência genérica. |
Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) |
Retorna o valor máximo em uma sequência genérica. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo Decimal. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Double>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo Double. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Int32>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo Int32. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Int64>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo Int64. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo de Decimal anulável. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo de Double anulável. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo de Int32 anulável. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo de Int64 anulável. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo de Single anulável. |
Max<TSource>(IEnumerable<TSource>, Func<TSource,Single>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor máximo Single. |
Max<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) |
Invoca uma função de transformação em cada elemento de uma sequência genérica e retorna o valor máximo resultante. |
MaxBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Retorna o valor máximo em uma sequência genérica de acordo com uma função de seletor de chave especificada. |
MaxBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) |
Retorna o valor máximo em uma sequência genérica de acordo com uma função de seletor de chave especificada e um comparador de chave. |
Min<TSource>(IEnumerable<TSource>) |
Retorna o valor mínimo em uma sequência genérica. |
Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) |
Retorna o valor mínimo em uma sequência genérica. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Decimal. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Double>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Double. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Int32>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Int32. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Int64>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Int64. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Decimal anulável. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Double anulável. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Int32 anulável. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Int64 anulável. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Single anulável. |
Min<TSource>(IEnumerable<TSource>, Func<TSource,Single>) |
Invoca uma função de transformação em cada elemento de uma sequência e retorna o valor mínimo de Single. |
Min<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) |
Invoca uma função de transformação em cada elemento de uma sequência genérica e retorna o valor mínimo resultante. |
MinBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Retorna o valor mínimo em uma sequência genérica de acordo com uma função de seletor de chave especificada. |
MinBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) |
Retorna o valor mínimo em uma sequência genérica de acordo com uma função de seletor de chave especificada e um comparador de chave. |
OfType<TResult>(IEnumerable) |
Filtra os elementos de um IEnumerable com base em um tipo especificado. |
Order<T>(IEnumerable<T>) |
Classifica os elementos de uma sequência em ordem crescente. |
Order<T>(IEnumerable<T>, IComparer<T>) |
Classifica os elementos de uma sequência em ordem crescente. |
OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Classifica os elementos de uma sequência em ordem crescente de acordo com uma chave. |
OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) |
Classifica os elementos de uma sequência em ordem crescente usando um comparador especificado. |
OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Classifica os elementos de uma sequência em ordem decrescente de acordo com uma chave. |
OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) |
Classifica os elementos de uma sequência em ordem decrescente usando um comparador especificado. |
OrderDescending<T>(IEnumerable<T>) |
Classifica os elementos de uma sequência em ordem decrescente. |
OrderDescending<T>(IEnumerable<T>, IComparer<T>) |
Classifica os elementos de uma sequência em ordem decrescente. |
Prepend<TSource>(IEnumerable<TSource>, TSource) |
Adiciona um valor ao início da sequência. |
Reverse<TSource>(IEnumerable<TSource>) |
Inverte a ordem dos elementos em uma sequência. |
Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) |
Projeta cada elemento de uma sequência em um novo formulário. |
Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) |
Projeta cada elemento de uma sequência em um novo formulário incorporando o índice do elemento. |
SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) |
Projeta cada elemento de uma sequência em um IEnumerable<T> e nivela as sequências resultantes em uma sequência. |
SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) |
Projeta cada elemento de uma sequência em um IEnumerable<T>e nivela as sequências resultantes em uma sequência. O índice de cada elemento de origem é usado na forma projetada desse elemento. |
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) |
Projeta cada elemento de uma sequência em um IEnumerable<T>, nivela as sequências resultantes em uma sequência e invoca uma função de seletor de resultados em cada elemento nela. |
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) |
Projeta cada elemento de uma sequência em um IEnumerable<T>, nivela as sequências resultantes em uma sequência e invoca uma função de seletor de resultados em cada elemento nela. O índice de cada elemento de origem é usado na forma projetada intermediária desse elemento. |
SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) |
Determina se duas sequências são iguais comparando os elementos usando o comparador de igualdade padrão para seu tipo. |
SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) |
Determina se duas sequências são iguais comparando seus elementos usando um IEqualityComparer<T>especificado. |
Single<TSource>(IEnumerable<TSource>) |
Retorna o único elemento de uma sequência e gera uma exceção se não houver exatamente um elemento na sequência. |
Single<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna o único elemento de uma sequência que satisfaz uma condição especificada e gera uma exceção se houver mais de um desses elementos. |
SingleOrDefault<TSource>(IEnumerable<TSource>) |
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; esse método gerará uma exceção se houver mais de um elemento na sequência. |
SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) |
Retorna o único elemento de uma sequência ou um valor padrão especificado se a sequência estiver vazia; esse método gerará uma exceção se houver mais de um elemento na sequência. |
SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão se nenhum elemento desse tipo existir; esse método gerará uma exceção se mais de um elemento atender à condição. |
SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource) |
Retorna o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão especificado se nenhum elemento desse tipo existir; esse método gerará uma exceção se mais de um elemento atender à condição. |
Skip<TSource>(IEnumerable<TSource>, Int32) |
Ignora um número especificado de elementos em uma sequência e retorna os elementos restantes. |
SkipLast<TSource>(IEnumerable<TSource>, Int32) |
Retorna uma nova coleção enumerável que contém os elementos de |
SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Ignora elementos em uma sequência, desde que uma condição especificada seja verdadeira e, em seguida, retorna os elementos restantes. |
SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) |
Ignora elementos em uma sequência, desde que uma condição especificada seja verdadeira e, em seguida, retorna os elementos restantes. O índice do elemento é usado na lógica da função de predicado. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>) |
Calcula a soma da sequência de valores Decimal obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Double>) |
Calcula a soma da sequência de valores Double obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Int32>) |
Calcula a soma da sequência de valores Int32 obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Int64>) |
Calcula a soma da sequência de valores Int64 obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>) |
Calcula a soma da sequência de valores Decimal anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>) |
Calcula a soma da sequência de valores Double anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>) |
Calcula a soma da sequência de valores Int32 anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>) |
Calcula a soma da sequência de valores Int64 anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>) |
Calcula a soma da sequência de valores Single anuláveis obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Sum<TSource>(IEnumerable<TSource>, Func<TSource,Single>) |
Calcula a soma da sequência de valores Single obtidos invocando uma função de transformação em cada elemento da sequência de entrada. |
Take<TSource>(IEnumerable<TSource>, Int32) |
Retorna um número especificado de elementos contíguos desde o início de uma sequência. |
Take<TSource>(IEnumerable<TSource>, Range) |
Retorna um intervalo especificado de elementos contíguos de uma sequência. |
TakeLast<TSource>(IEnumerable<TSource>, Int32) |
Retorna uma nova coleção enumerável que contém os últimos elementos |
TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Retorna elementos de uma sequência desde que uma condição especificada seja verdadeira. |
TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) |
Retorna elementos de uma sequência desde que uma condição especificada seja verdadeira. O índice do elemento é usado na lógica da função de predicado. |
ToArray<TSource>(IEnumerable<TSource>) |
Cria uma matriz de um IEnumerable<T>. |
ToDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Cria um Dictionary<TKey,TValue> de um IEnumerable<T> de acordo com uma função de seletor de chave especificada. |
ToDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Cria um Dictionary<TKey,TValue> de um IEnumerable<T> de acordo com uma função de seletor de chave especificada e um comparador de chave. |
ToDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) |
Cria um Dictionary<TKey,TValue> de uma IEnumerable<T> de acordo com as funções de seletor de elemento e seletor de elemento especificadas. |
ToDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) |
Cria um Dictionary<TKey,TValue> de uma IEnumerable<T> de acordo com uma função de seletor de chave especificada, um comparador e uma função seletora de elemento. |
ToHashSet<TSource>(IEnumerable<TSource>) |
Cria um HashSet<T> de um IEnumerable<T>. |
ToHashSet<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) |
Cria um HashSet<T> de um IEnumerable<T> usando o |
ToList<TSource>(IEnumerable<TSource>) |
Cria um List<T> de um IEnumerable<T>. |
ToLookup<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Cria um Lookup<TKey,TElement> de um IEnumerable<T> de acordo com uma função de seletor de chave especificada. |
ToLookup<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Cria um Lookup<TKey,TElement> de um IEnumerable<T> de acordo com uma função de seletor de chave especificada e um comparador de chave. |
ToLookup<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) |
Cria um Lookup<TKey,TElement> de uma IEnumerable<T> de acordo com as funções de seletor de elemento e seletor de elemento especificadas. |
ToLookup<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) |
Cria um Lookup<TKey,TElement> de uma IEnumerable<T> de acordo com uma função de seletor de chave especificada, um comparador e uma função de seletor de elemento. |
TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) |
Tenta determinar o número de elementos em uma sequência sem forçar uma enumeração. |
Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) |
Produz a união definida de duas sequências usando o comparador de igualdade padrão. |
Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) |
Produz a união definida de duas sequências usando um IEqualityComparer<T>especificado. |
UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>) |
Produz a união definida de duas sequências de acordo com uma função de seletor de chave especificada. |
UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Produz a união definida de duas sequências de acordo com uma função de seletor de chave especificada. |
Where<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Filtra uma sequência de valores com base em um predicado. |
Where<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) |
Filtra uma sequência de valores com base em um predicado. O índice de cada elemento é usado na lógica da função de predicado. |
Zip<TFirst,TSecond>(IEnumerable<TFirst>, IEnumerable<TSecond>) |
Produz uma sequência de tuplas com elementos das duas sequências especificadas. |
Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) |
Produz uma sequência de tuplas com elementos das três sequências especificadas. |
Zip<TFirst,TSecond,TResult>(IEnumerable<TFirst>, IEnumerable<TSecond>, Func<TFirst,TSecond,TResult>) |
Aplica uma função especificada aos elementos correspondentes de duas sequências, produzindo uma sequência dos resultados. |
AsParallel(IEnumerable) |
Habilita a paralelização de uma consulta. |
AsParallel<TSource>(IEnumerable<TSource>) |
Habilita a paralelização de uma consulta. |
AsQueryable(IEnumerable) |
Converte um IEnumerable em um IQueryable. |
AsQueryable<TElement>(IEnumerable<TElement>) |
Converte um IEnumerable<T> genérico em um IQueryable<T>genérico. |
Ancestors<T>(IEnumerable<T>) |
Retorna uma coleção de elementos que contém os ancestrais de cada nó na coleção de origem. |
Ancestors<T>(IEnumerable<T>, XName) |
Retorna uma coleção filtrada de elementos que contém os ancestrais de cada nó na coleção de origem. Somente os elementos que têm uma XName correspondente são incluídos na coleção. |
DescendantNodes<T>(IEnumerable<T>) |
Retorna uma coleção de nós descendentes de cada documento e elemento na coleção de origem. |
Descendants<T>(IEnumerable<T>) |
Retorna uma coleção de elementos que contém os elementos descendentes de cada elemento e documento na coleção de origem. |
Descendants<T>(IEnumerable<T>, XName) |
Retorna uma coleção filtrada de elementos que contém os elementos descendentes de cada elemento e documento na coleção de origem. Somente os elementos que têm uma XName correspondente são incluídos na coleção. |
Elements<T>(IEnumerable<T>) |
Retorna uma coleção dos elementos filho de cada elemento e documento na coleção de origem. |
Elements<T>(IEnumerable<T>, XName) |
Retorna uma coleção filtrada dos elementos filho de cada elemento e documento na coleção de origem. Somente os elementos que têm uma XName correspondente são incluídos na coleção. |
InDocumentOrder<T>(IEnumerable<T>) |
Retorna uma coleção de nós que contém todos os nós na coleção de origem, classificada na ordem do documento. |
Nodes<T>(IEnumerable<T>) |
Retorna uma coleção dos nós filho de cada documento e elemento na coleção de origem. |
Remove<T>(IEnumerable<T>) |
Remove cada nó da coleção de origem de seu nó pai. |