Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用列表项内容作为字符串名_C#_Dictionary_Reflection - Fatal编程技术网

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

C# 使用列表项内容作为字符串名,c#,dictionary,reflection,C#,Dictionary,Reflection,我正在使用C并从sqlite查询响应中生成列表 列表1包含一个字段,其名称与列表2中的字段相同 List1[i].field = fieldname 我想使用存储在List1[I].字段中的字段名访问List2中的项目,例如: List2[ii].+List1[i].field+ 我不知道这在C语言中是否是可能的。我对它比较陌生,基本上不了解PHP,在PHP中类似的东西是可以工作的。对于这种类型的数据结构,您通常使用字典键/值对来动态选择对象的属性。对于您的特定示例,这可以通过反射来实现,但

我正在使用C并从sqlite查询响应中生成列表

列表1包含一个字段,其名称与列表2中的字段相同

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

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

我不知道这在C语言中是否是可能的。我对它比较陌生,基本上不了解PHP,在PHP中类似的东西是可以工作的。

对于这种类型的数据结构,您通常使用字典键/值对来动态选择对象的属性。对于您的特定示例,这可以通过反射来实现,但它不是很常用,因为其他结构使它更容易实现

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];

你能再解释一下吗。。我能想到你想做的两三件不同的事情。。但是如果没有一个更有意义的例子,就很难确定你在问什么。我正在尝试使用存储在列表中的值来访问存储在另一个列表中的值。在列表2中存储的名称下。很乐意帮助。我补充了一些关于我提到的那本词典的信息,以防对你有所帮助。这比思考容易得多。谢谢,我会考虑改变我的方法。