如何将匿名类型的实例转换为NameValueCollection
假设我有一个匿名类实例
var foo = new { A = 1, B = 2};
有没有快速生成NameValueCollection的方法? 我想实现与下面的代码相同的结果,而不事先知道匿名类型的属性。
NameValueCollection formFields = new NameValueCollection(); formFields["A"] = 1; formFields["B"] = 2;
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()));
另一个(次要)变体,使用静态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()));
只是你想要的:
Dictionary dict = foo.GetType() .GetProperties() .ToDictionary(pi => pi.Name, pi => pi.GetValue(foo, null)); NameValueCollection nvc = new NameValueCollection(); foreach (KeyValuePair item in dict) { nvc.Add(item.Key, item.Value.ToString()); }
我喜欢Yurity给出的一个小调整的答案来检查空值。
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()));