2015-01-20 4 views
2

У меня есть два NameValueCollections:Как объединить два NameValueCollections?

NameValueCollection customTag = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("secureAppSettings"); 
NameValueCollection appSetting = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings"); 

Я попытался customTag.Add(appSetting); метод, но я получаю эту ошибку: Collection is read-only.

Как бы объединить их в один, так что я могу получить доступ ко всем элементам от обоих?

+0

Что вы хотите сделать, если оба они имеют одинаковое значение ключа? –

+0

Они должны перезаписать. – User765876

+1

Что нужно переписать? –

ответ

6

Чтобы объединить коллекции, попробовать что-то вроде следующего:

var secureSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("secureAppSettings"); 
var appSettings = (NameValueCollection)System.Configuration.ConfigurationManager.AppSettings; 

// Initialise a new NameValueCollection with the contents of the secureAppSettings section 
var allSettings = new NameValueCollection(secureSettings); 
// Add the values from the appSettings section 
foreach (string key in appSettings) 
{ 
    // Overwrite any entry already there 
    allSettings[key] = appSettings[key]; 
} 

Используйте новую allSettings коллекцию для доступа комбинированных установок.

0

I tried customTag.Add(appSetting); method but I get this error: Collection is read-only.

Это означает, что customTag объект предназначен только для чтения, и не может быть записано. .Add пытается изменить оригинал NameValueCollection. System.Configuration содержит ReadOnlyNameValueCollection, который расширяет NameValueCollection, чтобы сделать его доступным только для чтения, и поэтому, несмотря на то, что литье на общий NameValueCollection, объект по-прежнему доступен для чтения.

How would I combine them to one, so i can access all the elements from both?

Все, что вам нужно, это добавить обе коллекции третьей записываемой NameValueCollection.

Дано:

var customTag = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("secureAppSettings"); 
var appSetting = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings"); 

Вы могли .Add как:

var collection = new NameValueCollection(); 
collection.Add(customTag); 
collection.Add(appSettings); 

Однако NameValueCollection конструктор имеет сокращенную, который вызывает Add внутренне:

var collection = new NameValueCollection(customTag); 
collection.Add(appSettings); 

Имейте в виду, что в обоих случаях использование Add позволит добавлять к каждому ключу несколько значений.

Например, если вы должны были объединить {foo: "bar"} и {foo: "baz"}, результат будет {foo: ["bar", "baz"]} (синтаксис JSON, используемый для краткости).

Смежные вопросы