我有一组这样的object
:
object[] internationalRates = new object[]
{
new { name = "London", value = 1 },
new { name = "New York", value = 2 } ,
etc...
};
我需要获得List<string>
个国家/地区(或Dictionary<int, string>
对)。我该如何施展它?
答案 0 :(得分:5)
在这种情况下,您可以使用dynamic
关键字:
var result = internationalRates.ToDictionary(
x => ((dynamic)x).value,
x => ((dynamic)x).name);
这会产生一个带键/值对的字典。
警告:的
键和值都是dynamic
类型,我不喜欢它。如果您不注意原始类型,它可能会导致运行时异常。
例如,这很好用:
string name = result[2]; // name == "New York"
这也可以很好地编译,但会抛出一个运行时异常:
int name = result[2]; // tries to convert string to int, doesn't work
答案 1 :(得分:2)
如果您不想使用dynamic
,可以使用Reflection编写自己的ToDictionary
方法实现。像这样:
public static class Helper
{
public static Dictionary<T1, T2> ToDictionary<T1, T2>(this IEnumerable<object> dict, string key, string value)
{
Dictionary<T1, T2> meowDict = new Dictionary<T1, T2>();
foreach (object item in dict)
meowDict.Add((T1)item.GetType().GetProperty(key).GetValue(item),
(T2)item.GetType().GetProperty(value).GetValue(item));
return meowDict;
}
}
用法示例:
object[] internationalRates = new object[]
{
new { name = "London", value = 1 },
new { name = "New York", value = 2 } ,
};
var dict = internationalRates.ToDictionary<int, string>("value", "name");
foreach (KeyValuePair<int, string> item in dict)
Console.WriteLine(item.Key + " " + item.Value);
Console.ReadLine();
输出:
1伦敦
2纽约