使用列表项内容作为字符串名称
Using list item contents as string name
我正在使用 C# 并根据 sqlite 查询响应制作列表。
List1 包含一个与 list2 中的字段同名的字段
List1[i].field = fieldname
我想使用 List1[i].field
中存储的字段名来访问 List2
中的项目,例如:
List2[ii].+List1[i].field+
我不知道在 C# 中是否可以通过这种方式实现,我对它还比较陌生,并且基本上脱离了我对 PHP 的了解,这种方式确实有效。
对于这种类型的数据结构,您通常使用字典(key/value 对)动态地select 对象的属性。对于您的具体示例,这可以通过反射来完成,但它不是很常用,因为其他结构使它更容易。
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];
我正在使用 C# 并根据 sqlite 查询响应制作列表。
List1 包含一个与 list2 中的字段同名的字段
List1[i].field = fieldname
我想使用 List1[i].field
中存储的字段名来访问 List2
中的项目,例如:
List2[ii].+List1[i].field+
我不知道在 C# 中是否可以通过这种方式实现,我对它还比较陌生,并且基本上脱离了我对 PHP 的了解,这种方式确实有效。
对于这种类型的数据结构,您通常使用字典(key/value 对)动态地select 对象的属性。对于您的具体示例,这可以通过反射来完成,但它不是很常用,因为其他结构使它更容易。
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];