Как установить длину NameValueCollection
Я новичок в C# (не в программировании). Пожалуйста, как проще всего уменьшить количество элементов в объекте NameValueCollection? Например, у меня в коллекции 13 пар "имя-значение", и я хочу сократить их до первых 5. Нужно ли делать это в цикле?
Thanx
4 ответа
Если вы действительно хотите использовать NameValueCollection
и вы действительно хотите удалить элементы из исходной коллекции, тогда да, вы должны сделать это в цикле:
for (int i = 0; i<4; i++)
{
myNameValueCollection.Remove(myNameValueCollection[i]);
}
Обратите внимание, что единственная причина, по которой вы должны использовать NameValueCollection
когда вы связаны с.NET 1.1 или более ранней версией. Для всех других версий эквивалент NameValueCollection
является Dictionary<string,string>
На первый взгляд, я бы использовал метод Take LINQ, чтобы получить 5 первых элементов такой коллекции. К сожалению, объект NameValueCollection недоступен для linq.
Вот почему я бы посоветовал вместо этого использовать List или SortedList:
using System.Linq;
var y = new SortedList<string, string>();
y.Add("Element1Key", "Element1Value");
y.Add("Element2Key", "Element2Value");
...
y.Add("Element20000Key", "Element20000Value"); // ;)
var MyFirstFive = y.Take(5);
Если вам действительно нужно использовать NameValueCollection, то вы можете взглянуть на этот связанный вопрос, который ссылается на то, чтобы сделать NameValueCollection доступной для LINQ. Использование LINQ сделает вашу жизнь проще
В словаре C# или любой коллекции пар ключ-значение, такой как NameValueCollection, нет методов GetRange, AddRange... Однако, если бы вы использовали Dictionary вместо NameValueCollection, вы могли бы использовать запросы Linq, чтобы упростить свою жизнь. Вы можете удалить первые 5 элементов и выбрать, например, имена, начинающиеся с "A":
var myMap = new Dictionary<string, string>();
var myMapFirst5 = myMap.Take(5);
var myMapWithA = myMap.Select(x => x.Key.StartsWith("A"));
Если вы используете C# 4.0 и методы расширения работают с вашей коллекцией, вы можете написать var lFirst5 = lCollection.Take(5)
,
Мех.
Просто взглянул на NameValueCollection, и я вижу, что вы не можете сделать.Take() на нем. Я бы использовал другую коллекцию лично... может быть List<KeyValuePair<string, object>>
?