C#将匿名类型解析为字符串值列表

时间:2015-09-19 13:02:34

标签: c#

我有一组这样的object

object[] internationalRates = new object[] 
{ 
new { name = "London", value = 1 }, 
new { name = "New York", value = 2 } , 
etc...
};

我需要获得List<string>个国家/地区(或Dictionary<int, string>对)。我该如何施展它?

2 个答案:

答案 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纽约