как преобразовать экземпляр анонимного типа к NameValueCollection

Предположим, что у меня есть экземпляр анонимного класса

var foo = new { A = 1, B = 2};

Существует ли быстрый способ генерировать NameValueCollection? Я хотел бы достигнуть того же результата как код ниже, не зная свойств анонимного типа заранее.

NameValueCollection formFields = new NameValueCollection();
formFields["A"] = 1;
formFields["B"] = 2;
10
задан Frank Schwieterman 15 May 2010 в 00:18
поделиться

3 ответа

var foo = new { A = 1, B = 2 };

NameValueCollection formFields = new NameValueCollection();

foo.GetType().GetProperties()
    .ToList()
    .ForEach(pi => formFields.Add(pi.Name, pi.GetValue(foo, null).ToString()));
23
ответ дан 3 December 2019 в 14:52
поделиться

Примерно то, что вы хотите:

Dictionary<string, object> dict = 
       foo.GetType()
          .GetProperties()
          .ToDictionary(pi => pi.Name, pi => pi.GetValue(foo, null));

NameValueCollection nvc = new NameValueCollection();
foreach (KeyValuePair<string, object> item in dict)
{
   nvc.Add(item.Key, item.Value.ToString());
}
3
ответ дан 3 December 2019 в 14:52
поделиться

Другой (незначительный) вариант, использующий статический Метод Array.ForEach для просмотра свойств ...

var foo = new { A = 1, B = 2 };

var formFields = new NameValueCollection();
Array.ForEach(foo.GetType().GetProperties(),
    pi => formFields.Add(pi.Name, pi.GetValue(foo, null).ToString()));
4
ответ дан 3 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

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