Скопируйте значения ключа из NameValueCollection в Общий словарь

Решено после удаления содержимого DerivedData -> Build -> Products -> Debug-iphoneos

25
задан Kobojunkie 14 May 2013 в 18:32
поделиться

3 ответа

parameters.AllKeys.ToDictionary(t => t, t => parameters[t]);
14
ответ дан Chobits 14 May 2013 в 18:32
поделиться

Если вы знаете, что ваш словарь всегда будет содержать строки, укажите его, чтобы он содержал строки вместо того, чтобы сделать ваш класс универсальным:

IDictionary<string, string> dict = new Dictionary<string, string>();

При этом все будет «просто работать» как написано (без общая спецификация метода).

Если вам нужно, чтобы это был общий класс и он содержал общие данные, вам нужно каким-то образом преобразовать из string в TKey и string в TValue. Вы можете предоставить делегатов вашему методу копирования, чтобы сделать это:

public void CopyFrom(NameValueCollection a, Func<string, TKey> keyConvert, Func<string, TValue> valueConvert)
{
    foreach(var k in a.AllKeys)
    {
         dict.Add(keyConvert(k), valueConvert(a[k]));
    }
}

Затем вам нужно будет передать делегата, который будет выполнять преобразование из строки в TValue и строки в TKey.

2
ответ дан Reed Copsey 14 May 2013 в 18:32
поделиться

Не стоит забывать и о EqualityComparer. Но это не публичная собственность. Таким образом, вы должны использовать отражение, чтобы получить его.

public static IEqualityComparer GetEqualityComparer(this NameObjectCollectionBase nameObjectCollection)
  {
  PropertyInfo propertyInfo = typeof(NameObjectCollectionBase).GetProperty("Comparer", BindingFlags.Instance | BindingFlags.NonPublic);
  return (IEqualityComparer)propertyInfo.GetValue(nameObjectCollection);
  }

public static IEqualityComparer<string> GetEqualityComparer(this NameValueCollection nameValueCollection)
  {
  return (IEqualityComparer<string>)((NameObjectCollectionBase)nameValueCollection).GetEqualityComparer();
  }

public static Dictionary<string, string> ToDictionary(this NameValueCollection nameValueCollection)
  {
  Dictionary<string, string> dictionary =
    nameValueCollection.AllKeys.ToDictionary(x => x, x => nameValueCollection[x], nameValueCollection.GetEqualityComparer());
  return dictionary;
  }
0
ответ дан Dmitriy Dokshin 14 May 2013 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: