2

我是 C# 的新手(不是编程)。请问,减少 NameValueCollection 对象中项目数的最简单方法是什么?例如,我在集合中有 13 个名称-值对,我想将其减少到前 5 个。我真的必须循环执行吗?

谢谢

4

4 回答 4

0

在 C# Dictionary 或任何 Key-Value 对集合(例如 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"));
于 2010-10-06T07:26:04.833 回答
0

如果您真的想使用NameValueCollection并且真的想从原始集合中删除项目,那么是的,您必须循环执行:

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

请注意,您应该使用的唯一原因NameValueCollection是当您绑定到 .NET 1.1 或更早版本时。对于所有其他版本,等效NameValueCollectionDictionary<string,string>

于 2010-10-06T07:08:00.980 回答
0

乍一看,我会使用 LINQ 的 Take 方法来获取此类集合的前 5 个元素。不幸的是,linq 无法访问 NameValueCollection 对象。

这就是为什么我建议改用 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,那么您可以查看这个相关问题,该问题指的是 LINQ 可以访问 NameValueCollection。使用 LINQ 将使您的生活更轻松

于 2010-10-06T07:08:19.440 回答
0

如果您使用 C# 4.0 并且扩展方法适用于您的集合,您应该能够简单地编写var lFirst5 = lCollection.Take(5).

嗯。

刚刚看了一下 NameValueCollection ,我发现你不能对它做 .Take() 。我个人会使用不同的集合......也许List<KeyValuePair<string, object>>

于 2010-10-06T07:04:21.863 回答