使用列表项内容作为字符串名称

时间:2015-05-12 01:57:17

标签: c# dictionary reflection

我正在使用C#并从sqlite查询响应中创建列表。

List1包含一个在list2

中具有字段名称的字段
List1[i].field = fieldname

我想使用List1[i].field中存储的字段名来访问List2中的项目,例如:

List2[ii].+List1[i].field+

我不知道在C#中这是否可行,这对我来说是相对较新的,并且基本上不了我的PHP知识,这样的事情可行。

1 个答案:

答案 0 :(得分:7)

对于这种类型的数据结构,通常使用字典(键/值对)来动态选择对象的属性。对于您的具体示例,这可以通过反射来完成,但它并不常用,因为其他结构使其更容易。

List2[ii].GetType().GetProperty(List1[i].field).GetValue(List2[ii], null);

反射通常不是最快的解决方案类型,如果可以避免的话,通常不会很好地进入并维护具有大量反射的代码。

或者,您可以使用Linq将List2从对象类型列表中转移到字典对象列表中,这样您就可以执行List2[ii][List1[i].field]之类的操作来完成同样的事情。

var listDictionaries = List2
    .Select(l => new Dictionary<string, object>()
    {
        new { "Prop1", l.Prop1 },
        new { "Prop2", l.Prop2 },
        new { "Prop3", l.Prop3 },
    }).ToArray();
listDictionaries[ii][List1[i].field];