C# 如何铸造IEnumerable<;动态>;到IDictionary<>;?

C# 如何铸造IEnumerable<;动态>;到IDictionary<>;?,c#,dynamic,dictionary,C#,Dynamic,Dictionary,我从IEnumerable模型中包含的数据实体中获取这些数据 Address: "test" AuctioneerId: 0 CharityId: 0 City: "test" 我想把它放在IDictionary中,以获得标题地址和值测试 假设您有这样一个类: class Test { public int Value1 { get; set; } public string Value2 { get; set; } } 以及测试的一个实例 var item = new Te

我从IEnumerable模型中包含的数据实体中获取这些数据

Address: "test"
AuctioneerId: 0
CharityId: 0
City: "test"
我想把它放在
IDictionary
中,以获得标题地址和值测试


假设您有这样一个类:

class Test
{
    public int Value1 { get; set; }
    public string Value2 { get; set; }
}
以及
测试的一个实例

var item = new Test { Value1 = 1, Value2 = "hey!!!" };
要获取属性名为键、值为值的
字典
,可以使用反射:

var dict = item.GetType()
               .GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty)
               .ToDictionary(p => p.Name, p => p.GetValue(item));
或者将方法添加到
测试
并手动创建字典:

public Dictionary<string, object> ToDictionary()
{
    return new Dictionary<string, object>() {
        { "Value1", Value1 },
        { "Value2", Value2 }
    };
}

第二种方法性能更好,但您必须将所有属性手动写入字典。但实际上,如果您只希望结果字典中出现一部分值,这可能是一件好事。

dynamic
不是一种类型。这是一种以动态方式看待底层真实类型的方法。您的
IEnumerable
实际上保存的是什么样的数据?这是完整的代码视图hmm,看起来您正试图将实体属性放入字典,属性名称作为键,属性值作为值。它与
IEnumerable
无关。看起来设计非常糟糕,可能是XY问题:我这样做的原因是我正在使用streamwriter创建csv导出。
var dict = item.ToDictionary();