我是 C# 的新手(不是编程)。请问,减少 NameValueCollection 对象中项目数的最简单方法是什么?例如,我在集合中有 13 个名称-值对,我想将其减少到前 5 个。我真的必须循环执行吗?
谢谢
我是 C# 的新手(不是编程)。请问,减少 NameValueCollection 对象中项目数的最简单方法是什么?例如,我在集合中有 13 个名称-值对,我想将其减少到前 5 个。我真的必须循环执行吗?
谢谢
在 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"));
如果您真的想使用NameValueCollection
并且真的想从原始集合中删除项目,那么是的,您必须循环执行:
for (int i = 0; i<4; i++)
{
myNameValueCollection.Remove(myNameValueCollection[i]);
}
请注意,您应该使用的唯一原因NameValueCollection
是当您绑定到 .NET 1.1 或更早版本时。对于所有其他版本,等效NameValueCollection
于Dictionary<string,string>
乍一看,我会使用 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 将使您的生活更轻松
如果您使用 C# 4.0 并且扩展方法适用于您的集合,您应该能够简单地编写var lFirst5 = lCollection.Take(5)
.
嗯。
刚刚看了一下 NameValueCollection ,我发现你不能对它做 .Take() 。我个人会使用不同的集合......也许List<KeyValuePair<string, object>>
?