Поделиться через


NameValueCollection Класс

Определение

Представляет коллекцию связанных ключей String и значений String, доступ к которым можно получить с помощью ключа или индекса.

public ref class NameValueCollection : System::Collections::Specialized::NameObjectCollectionBase
public class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase
[System.Serializable]
public class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase
type NameValueCollection = class
    inherit NameObjectCollectionBase
[<System.Serializable>]
type NameValueCollection = class
    inherit NameObjectCollectionBase
Public Class NameValueCollection
Inherits NameObjectCollectionBase
Наследование
NameValueCollection
Производный
Атрибуты

Примеры

#using <System.dll>

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Specialized;

void PrintKeysAndValues( NameValueCollection^ myCol );
void PrintKeysAndValues2( NameValueCollection^ myCol );

int main()
{
   // Creates and initializes a new NameValueCollection.
   NameValueCollection^ myCol = gcnew NameValueCollection;
   myCol->Add( "red", "rojo" );
   myCol->Add( "green", "verde" );
   myCol->Add( "blue", "azul" );
   myCol->Add( "red", "rouge" );

   // Displays the values in the NameValueCollection in two different ways.
   Console::WriteLine( "Displays the elements using the AllKeys property and the Item (indexer) property:" );
   PrintKeysAndValues( myCol );
   Console::WriteLine( "Displays the elements using GetKey and Get:" );
   PrintKeysAndValues2( myCol );

   // Gets a value either by index or by key.
   Console::WriteLine( "Index 1 contains the value {0}.", myCol[ 1 ] );
   Console::WriteLine( "Key \"red\" has the value {0}.", myCol[ "red" ] );
   Console::WriteLine();

   // Copies the values to a string array and displays the string array.
   array<String^>^myStrArr = gcnew array<String^>(myCol->Count);
   myCol->CopyTo( myStrArr, 0 );
   Console::WriteLine( "The string array contains:" );
   for each ( String^ s in myStrArr )
      Console::WriteLine( "   {0}", s );
   Console::WriteLine();

   // Searches for a key and deletes it.
   myCol->Remove( "green" );
   Console::WriteLine( "The collection contains the following elements after removing \"green\":" );
   PrintKeysAndValues( myCol );

   // Clears the entire collection.
   myCol->Clear();
   Console::WriteLine( "The collection contains the following elements after it is cleared:" );
   PrintKeysAndValues( myCol );
}

void PrintKeysAndValues( NameValueCollection^ myCol )
{
   Console::WriteLine( "   KEY        VALUE" );
   for each ( String^ s in myCol->AllKeys )
      Console::WriteLine( "   {0,-10} {1}", s, myCol[s] );
   Console::WriteLine();
}

void PrintKeysAndValues2( NameValueCollection^ myCol )
{
   Console::WriteLine( "   [INDEX] KEY        VALUE" );
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]     {1,-10} {2}", i, myCol->GetKey( i ), myCol->Get( i ) );
   Console::WriteLine();
}

/*

This code produces the following output.

Displays the elements using the AllKeys property and the Item (indexer) property:
   KEY        VALUE
   red        rojo,rouge
   green      verde
   blue       azul

Displays the elements using GetKey and Get:
   [INDEX] KEY        VALUE
   [0]     red        rojo,rouge
   [1]     green      verde
   [2]     blue       azul

Index 1 contains the value verde.
Key "red" has the value rojo,rouge.

The string array contains:
   rojo,rouge
   verde
   azul

The collection contains the following elements after removing "green":
   KEY        VALUE
   red        rojo,rouge
   blue       azul

The collection contains the following elements after it is cleared:
   KEY        VALUE


*/
using System;
using System.Collections;
using System.Collections.Specialized;

public class SamplesNameValueCollection  {

   public static void Main()  {

      // Creates and initializes a new NameValueCollection.
      NameValueCollection myCol = new NameValueCollection();
      myCol.Add( "red", "rojo" );
      myCol.Add( "green", "verde" );
      myCol.Add( "blue", "azul" );
      myCol.Add( "red", "rouge" );

      // Displays the values in the NameValueCollection in two different ways.
      Console.WriteLine( "Displays the elements using the AllKeys property and the Item (indexer) property:" );
      PrintKeysAndValues( myCol );
      Console.WriteLine( "Displays the elements using GetKey and Get:" );
      PrintKeysAndValues2( myCol );

      // Gets a value either by index or by key.
      Console.WriteLine( "Index 1 contains the value {0}.", myCol[1] );
      Console.WriteLine( "Key \"red\" has the value {0}.", myCol["red"] );
      Console.WriteLine();

      // Copies the values to a string array and displays the string array.
      String[] myStrArr = new String[myCol.Count];
      myCol.CopyTo( myStrArr, 0 );
      Console.WriteLine( "The string array contains:" );
      foreach ( String s in myStrArr )
         Console.WriteLine( "   {0}", s );
      Console.WriteLine();

      // Searches for a key and deletes it.
      myCol.Remove( "green" );
      Console.WriteLine( "The collection contains the following elements after removing \"green\":" );
      PrintKeysAndValues( myCol );

      // Clears the entire collection.
      myCol.Clear();
      Console.WriteLine( "The collection contains the following elements after it is cleared:" );
      PrintKeysAndValues( myCol );
   }

   public static void PrintKeysAndValues( NameValueCollection myCol )  {
      Console.WriteLine( "   KEY        VALUE" );
      foreach ( String s in myCol.AllKeys )
         Console.WriteLine( "   {0,-10} {1}", s, myCol[s] );
      Console.WriteLine();
   }

   public static void PrintKeysAndValues2( NameValueCollection myCol )  {
      Console.WriteLine( "   [INDEX] KEY        VALUE" );
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]     {1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i) );
      Console.WriteLine();
   }
}

/*

This code produces the following output.

Displays the elements using the AllKeys property and the Item (indexer) property:
   KEY        VALUE
   red        rojo,rouge
   green      verde
   blue       azul

Displays the elements using GetKey and Get:
   [INDEX] KEY        VALUE
   [0]     red        rojo,rouge
   [1]     green      verde
   [2]     blue       azul

Index 1 contains the value verde.
Key "red" has the value rojo,rouge.

The string array contains:
   rojo,rouge
   verde
   azul

The collection contains the following elements after removing "green":
   KEY        VALUE
   red        rojo,rouge
   blue       azul

The collection contains the following elements after it is cleared:
   KEY        VALUE


*/
' The following code example demonstrates several of the properties and methods of ListDictionary.

Imports System.Collections
Imports System.Collections.Specialized


Public Class SamplesNameValueCollection

    Public Shared Sub Main()

        ' Creates and initializes a new NameValueCollection.
        Dim myCol As New NameValueCollection()
        myCol.Add("red", "rojo")
        myCol.Add("green", "verde")
        myCol.Add("blue", "azul")
        myCol.Add("red", "rouge")

        ' Displays the values in the NameValueCollection in two different ways.
        Console.WriteLine("Displays the elements using the AllKeys property and the Item (indexer) property:")
        PrintKeysAndValues(myCol)
        Console.WriteLine("Displays the elements using GetKey and Get:")
        PrintKeysAndValues2(myCol)

        ' Gets a value either by index or by key.
        Console.WriteLine("Index 1 contains the value {0}.", myCol(1))
        Console.WriteLine("Key ""red"" has the value {0}.", myCol("red"))
        Console.WriteLine()

        ' Copies the values to a string array and displays the string array.
        Dim myStrArr(myCol.Count) As String
        myCol.CopyTo(myStrArr, 0)
        Console.WriteLine("The string array contains:")
        Dim s As String
        For Each s In myStrArr
            Console.WriteLine("   {0}", s)
        Next s
        Console.WriteLine()

        ' Searches for a key and deletes it.
        myCol.Remove("green")
        Console.WriteLine("The collection contains the following elements after removing ""green"":")
        PrintKeysAndValues(myCol)

        ' Clears the entire collection.
        myCol.Clear()
        Console.WriteLine("The collection contains the following elements after it is cleared:")
        PrintKeysAndValues(myCol)

    End Sub

    Public Shared Sub PrintKeysAndValues(myCol As NameValueCollection)
        Console.WriteLine("   KEY        VALUE")
        Dim s As String
        For Each s In  myCol.AllKeys
            Console.WriteLine("   {0,-10} {1}", s, myCol(s))
        Next s
        Console.WriteLine()
    End Sub

    Public Shared Sub PrintKeysAndValues2(myCol As NameValueCollection)
        Console.WriteLine("   [INDEX] KEY        VALUE")
        Dim i As Integer
        For i = 0 To myCol.Count - 1
            Console.WriteLine("   [{0}]     {1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i))
        Next i
        Console.WriteLine()
    End Sub

End Class


'This code produces the following output.
'
'Displays the elements using the AllKeys property and the Item (indexer) property:
'   KEY        VALUE
'   red        rojo,rouge
'   green      verde
'   blue       azul
'
'Displays the elements using GetKey and Get:
'   [INDEX] KEY        VALUE
'   [0]     red        rojo,rouge
'   [1]     green      verde
'   [2]     blue       azul
'
'Index 1 contains the value verde.
'Key "red" has the value rojo,rouge.
'
'The string array contains:
'   red
'   green
'   blue
'
'
'The collection contains the following elements after removing "green":
'   KEY        VALUE
'   red        rojo,rouge
'   blue       azul
'
'The collection contains the following elements after it is cleared:
'   KEY        VALUE
'
'

Комментарии

Эта коллекция основана на NameObjectCollectionBase классе . Каждый элемент коллекции является парой "ключ-значение". Однако, в NameObjectCollectionBaseотличие от , этот класс может хранить несколько строковых значений в одном ключе.

Этот класс можно использовать для заголовков, строк запросов и данных формы.

Коллекции этого типа не сохраняют порядок элементов, и при перечислении коллекции не гарантируется определенное упорядочение.

Емкость NameValueCollection — это количество элементов, которые могут храниться NameValueCollection . По мере добавления элементов его емкость автоматически увеличивается по мере необходимости путем перераспределения.

Поставщик хэш-кода раздает хэш-коды для ключей NameValueCollectionв . Поставщиком хэш-кода по умолчанию является CaseInsensitiveHashCodeProvider.

Функция сравнения определяет, равны ли два ключа. Компаратор по умолчанию — это CaseInsensitiveComparer , использующий соглашения инвариантного языка и региональных параметров, то есть ключевые сравнения по умолчанию не учитывают регистр. Чтобы выполнить сравнение ключей с учетом регистра NameValueCollection.NameValueCollection(IEqualityComparer) , вызовите конструктор и укажите значение StringComparer.CurrentCulture, StringComparer.InvariantCultureили StringComparer.Ordinal в качестве аргумента equalityComparer . Дополнительные сведения о том, как язык и региональные параметры влияют на сравнение и сортировку, см. в разделе Выполнение Culture-Insensitive строковых операций.

null допускается в качестве ключа или значения.

Внимание!

Метод Get не различает null возвращаемое значение, так как указанный ключ не найден, а null какой возвращается, так как значение, связанное с ключом, равно null.

Конструкторы

NameValueCollection()

Инициализирует новый экземпляр класса NameValueCollection, который является пустым, обладает исходной емкостью по умолчанию, использует поставщика хэш-кода по умолчанию и функцию сравнения по умолчанию. Функция сравнения и поставщик хэш-кода работают без учета регистра.

NameValueCollection(IEqualityComparer)

Инициализирует новый экземпляр пустого класса NameValueCollection, который обладает начальной емкостью по умолчанию и использует указанный объект IEqualityComparer.

NameValueCollection(IHashCodeProvider, IComparer)
Устаревшие..
Устаревшие..

Инициализирует новый экземпляр класса NameValueCollection, который является пустым, обладает начальной емкостью по умолчанию и использует указанного поставщика хэш-кода и указанную функцию сравнения.

NameValueCollection(Int32)

Инициализирует новый экземпляр класса NameValueCollection, который является пустым, обладает указанной исходной емкостью, использует поставщика хэш-кода по умолчанию и функцию сравнения по умолчанию. Функция сравнения и поставщик хэш-кода работают без учета регистра.

NameValueCollection(Int32, IEqualityComparer)

Инициализирует новый экземпляр класса NameValueCollection, который является пустым, обладает указанной исходной емкостью и использует заданный объект IEqualityComparer.

NameValueCollection(Int32, IHashCodeProvider, IComparer)
Устаревшие..
Устаревшие..

Инициализирует новый экземпляр пустого класса NameValueCollection, который обладает указанной исходной емкостью и использует заданного поставщика хэш-кода и функцию сравнения.

NameValueCollection(Int32, NameValueCollection)

Копирует записи из указанной коллекции NameValueCollection в новую коллекцию NameValueCollection с указанной начальной емкостью или начальной емкостью, равной количеству копируемых записей, — в зависимости от того, какое значение больше. При этом используются поставщик хэш-кода по умолчанию и функция сравнения по умолчанию, работающие без учета регистра.

NameValueCollection(NameValueCollection)

Копирует записи из указанной коллекции NameValueCollection в новую коллекцию NameValueCollection с начальной емкостью, равной количеству копируемых записей. При этом используется такой же поставщик хэш-кода и такая же функция сравнения, которые использовались в исходной коллекции.

NameValueCollection(SerializationInfo, StreamingContext)
Устаревшие..

Инициализирует новый экземпляр класса NameValueCollection, который поддерживает сериализацию и использует указанные объекты SerializationInfo и StreamingContext.

Свойства

AllKeys

Получает все ключи в коллекции NameValueCollection.

Count

Возвращает число пар "ключ-значение", содержащихся в экземпляре класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
IsReadOnly

Возвращает или задает значение, указывающее, является ли экземпляр класса NameObjectCollectionBase доступным только для чтения.

(Унаследовано от NameObjectCollectionBase)
Item[Int32]

Получает запись по указанному индексу в коллекции NameValueCollection.

Item[String]

Получает или задает запись с указанным ключом в коллекции NameValueCollection.

Keys

Возвращает экземпляр NameObjectCollectionBase.KeysCollection, содержащий все ключи в экземпляре NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)

Методы

Add(NameValueCollection)

Копирует записи из указанной коллекции NameValueCollection в текущую коллекцию NameValueCollection.

Add(String, String)

Добавляет запись с указанным ключом и значением в коллекцию NameValueCollection.

BaseAdd(String, Object)

Добавляет запись с указанным ключом и значением в экземпляр класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseClear()

Удаляет все записи из экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseGet(Int32)

Возвращает значение записи по указанному индексу экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseGet(String)

Возвращает значение первой записи с указанным ключом из экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseGetAllKeys()

Возвращает массив String, который содержит все ключи экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseGetAllValues()

Возвращает массив Object, который содержит все значения экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseGetAllValues(Type)

Возвращает массив указанного типа, который содержит все значения экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseGetKey(Int32)

Возвращает ключ записи по указанному индексу в экземпляре класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseHasKeys()

Возвращает значение, показывающее, содержит ли экземпляр класса NameObjectCollectionBase записи, в которых значение ключа отлично от null.

(Унаследовано от NameObjectCollectionBase)
BaseRemove(String)

Удаляет записи с указанным ключом из экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseRemoveAt(Int32)

Удаляет запись по указанному индексу в экземпляре класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseSet(Int32, Object)

Задает значение записи по указанному индексу экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
BaseSet(String, Object)

Задает значение первой записи с указанным ключом в экземпляре класса NameObjectCollectionBase, если ключ найден; в противном случае добавляет запись с указанным ключом и значением в экземпляр класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
Clear()

Делает недопустимыми кэшированные массивы и удаляет все записи из коллекции NameValueCollection.

CopyTo(Array, Int32)

Копирует целый массив NameValueCollection в совместимый одномерный массив Array, начиная с заданного индекса целевого массива.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Get(Int32)

Получает значения по указанному индексу в коллекции NameValueCollection, объединенные в один список с разделителями-запятыми.

Get(String)

Получает значения, связанные с указанным ключом, из коллекции NameValueCollection, объединенные в один список, в котором используются разделители-запятые.

GetEnumerator()

Возвращает перечислитель, осуществляющий перебор элементов списка NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetKey(Int32)

Получает ключ по указанному индексу в коллекции NameValueCollection.

GetObjectData(SerializationInfo, StreamingContext)
Устаревшие..

Реализует интерфейс ISerializable и возвращает данные, необходимые для сериализации экземпляра класса NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetValues(Int32)

Получает значения по указанному индексу в коллекции NameValueCollection.

GetValues(String)

Получает значения, связанные с указанным ключом, из коллекции NameValueCollection.

HasKeys()

Получает значение, показывающее, содержит ли коллекция NameValueCollection ключи, отличные от null.

InvalidateCachedArrays()

Сбрасывает кэшированные массивы в коллекции до значения null.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnDeserialization(Object)

Реализует интерфейс ISerializable и вызывает событие десериализации при завершении десериализации.

(Унаследовано от NameObjectCollectionBase)
Remove(String)

Удаляет записи с указанным ключом из экземпляра класса NameObjectCollectionBase.

Set(String, String)

Задает значение записи в коллекции NameValueCollection.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

ICollection.CopyTo(Array, Int32)

Копирует целый массив NameObjectCollectionBase в совместимый одномерный массив Array, начиная с заданного индекса целевого массива.

(Унаследовано от NameObjectCollectionBase)
ICollection.IsSynchronized

Возвращает значение, указывающее на то, является ли доступ к объекту NameObjectCollectionBase синхронизированным (потокобезопасным).

(Унаследовано от NameObjectCollectionBase)
ICollection.SyncRoot

Возвращает объект, который позволяет синхронизировать доступ к объекту NameObjectCollectionBase.

(Унаследовано от NameObjectCollectionBase)

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Потокобезопасность

Открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.

Эта реализация не предоставляет синхронизированную (потокобезопасную) оболочку NameValueCollectionдля , но производные классы могут создавать собственные синхронизированные NameValueCollection версии с помощью SyncRoot свойства NameObjectCollectionBase класса .

Перечисление через коллекцию внутренне не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.

См. также раздел