1

不确定这是否可能,但有没有办法做到这一点?

给定这个类:

class A
{
    public String B {get;set;}
    public String C {get;set;}
    public String D {get;set;}
}

实例化 A 并将 V1,V2,V3 分别分配给 B,C,D

我想要一个 Dictionary\Matrix\一些其他结构包含

B:V1
C:V2
D:V3

最好不使用 3rd 方库

4

4 回答 4

2
var props = typeof(A).GetProperties();
Dictionary<string, string> output=new Dictionary<string,string>();

foreach(PropertyInfo pi in props)
{
    var name = pi.Name,
    string value= pi.GetValue(this, null) as string;
    output[name]=value;
}
于 2013-05-30T12:38:13.863 回答
2
var a = new A{B = "V1", C = "V2", D = "V3"};

var dictionary = a.GetType()
                  .GetProperties()
                  .ToDictionary(prop => prop.Name, 
                                prop => prop.GetValue(a));
于 2013-05-30T12:37:00.400 回答
1

字段及其值的简单示例(对于公共字段):

    var a = new A("a", "b", "c");
    var fields = typeof(A).GetFields();
    var dict = new Dictionary<string, string>(fields.Length);
    foreach (var fieldInfo in fields)
    {
         dict.Add(fieldInfo.Name, (string)fieldInfo.GetValue(a));
    }
于 2013-05-30T12:39:44.740 回答
0

请注意,这只是一个示例,您应该添加更多防御性代码以检查字段类型是否正确等...

使用反射的简单方法:

var a = new A();
.
.  fill in a.B... etc
.
.
Dictionary<String, String> dict = 
               a.GetType()
                .GetFields()
                .ToDictionary(k => k.Name, v => v.GetValue(a).ToString())

GetFields () 返回一个FieldInfo [] 数组,因此您可以首先检查其他内容,例如正在定义的字段等。

于 2013-05-30T12:43:15.900 回答