Как я могу преобразовать Dictionary<string, string>
в NameValueCollection
?
Существующая функциональность нашего проекта возвращает старомодный NameValueCollection
, который я модифицирую с помощью LINQ. Результат должен быть передан как NameValueCollection
.
Я хочу решить эту проблему в общем виде. Какие-нибудь намеки?
3 ответа
Почему бы не использовать простой цикл foreach
?
foreach(var kvp in dict)
{
nameValueCollection.Add(kvp.Key.ToString(), kvp.Value.ToString());
}
Это может быть встроено в метод расширения:
public static NameValueCollection ToNameValueCollection<TKey, TValue>(
this IDictionary<TKey, TValue> dict)
{
var nameValueCollection = new NameValueCollection();
foreach(var kvp in dict)
{
string value = null;
if(kvp.Value != null)
value = kvp.Value.ToString();
nameValueCollection.Add(kvp.Key.ToString(), value);
}
return nameValueCollection;
}
Тогда вы могли бы назвать это так:
var nameValueCollection = dict.ToNameValueCollection();
И если вам нравится LINQ:
Словарь для NameValueCollection
return dictionary.Aggregate(new NameValueCollection(),
(seed, current) => {
seed.Add(current.Key, current.Value);
return seed;
});
NameValueCollection в словарь
return source.Cast<string>()
.ToDictionary(s => s, s => source[s]);
Попробуйте это расширение для словаря, надеюсь, это то, что вы хотели:
public static class DictionaryExtensions
{
public static NameValueCollection ToNameValueCollection<tValue>(this IDictionary<string, tValue> dictionary)
{
var collection = new NameValueCollection();
foreach(var pair in dictionary)
collection.Add(pair.Key, pair.Value.ToString());
return collection;
}
}
Использовать как
var nvc = myDict.ToNameValueCollection();
Примечание: я ограничил ключ строкой, потому что не хотел чрезмерно обобщать - конечно, вы можете изменить это с помощью универсального типа и .ToString () для ключа тоже.
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.