Это не совсем то, для чего предназначены NameValueCollection
с; если вам нужно манипулировать вашей коллекцией таким образом, вам следует рассмотреть другую структуру данных (OrderedDictionary
?) Тем не менее, вот метод расширения, который будет делать то, что вы хотите:
static class NameValueCollectionExtensions {
public static void Insert(this NameValueCollection collection, int index, string key, string value) {
int count = collection.Count;
if (index < 0 || index > count) {
throw new ArgumentOutOfRangeException("index");
}
List<string> keys = new List<string>(collection.AllKeys);
List<string> values = keys.Select(k => collection[k]).ToList();
keys.Insert(index, key);
values.Insert(index, value);
collection.Clear();
for (int i = 0; i <= count; i++) {
collection.Add(keys[i], values[i]);
}
}
}
Я не знаю, что collection.AllKeys
гарантированно вернет ключи в том порядке, в котором они были вставлены. Если вы можете найти документацию, подтверждающую, что это так, то все в порядке. В противном случае замените строку
List<string> keys = new List<string>(collection.AllKeys);
с
List<string> keys = new List<string>();
for(int i = 0; i < count; i++) {
keys.Add(collection.Keys[i]);
}