Как установить длину NameValueCollection - PullRequest
2 голосов
/ 06 октября 2010

Я новичок в C # (не в программировании).Пожалуйста, как проще всего уменьшить количество элементов в объекте NameValueCollection?Например, у меня в коллекции 13 пар имя-значение, и я хочу сократить их до первых 5. Действительно ли мне нужно делать это в цикле?

Ответы [ 4 ]

0 голосов
/ 06 октября 2010

В словаре 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"));
0 голосов
/ 06 октября 2010

Если вы действительно хотите использовать NameValueCollection и действительно хотите удалить элементы из исходной коллекции, тогда да, вы должны сделать это в цикле:

for (int i = 0; i<4; i++)
{ 
     myNameValueCollection.Remove(myNameValueCollection[i]);
}

Обратите внимание, что единственная причина, по которой вы должны использовать NameValueCollection, это когда вы связаны с .NET 1.1 или более ранней версией. Для всех других версий эквивалент NameValueCollection равен Dictionary<string,string>

0 голосов
/ 06 октября 2010

На первый взгляд, я бы использовал метод 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 сделает вашу жизнь проще

0 голосов
/ 06 октября 2010

Если вы используете C # 4.0 и методы расширения работают с вашей коллекцией, вы сможете написать var lFirst5 = lCollection.Take(5).

Мех.

Только что посмотрел на NameValueCollection, и я вижу, что вы не можете сделать .Take () на нем. Я бы использовал другую коллекцию лично ... может быть List<KeyValuePair<string, object>>?

...