无法将类型'System.Collections.Generic.KeyValuePair<int, dynamic>'转换为'System.Collections.Generic.Dictionary<int, dynamic>'

3

我将尝试循环遍历值的字典,然后通过字典键值更新"MTables"(表名)中的行,在“QvxDataRow MakeEntry()”函数中。

我需要"MTables"像这样包含

SlNo StudentName StudentClass
1        Daniel                4
2         Maties               4

但是在我的代码中,我使用类似下面的 for each 循环时出现了错误

Cannot convert type 'System.Collections.Generic.KeyValuePair<int, dynamic>' to 'System.Collections.Generic.Dictionary<int, dynamic>

我需要添加硬编码的值并将其放入MTables的行中。我有以下代码:
   private IEnumerable<QvxDataRow> GetApplicationDB()
        {
            Dictionary<int, dynamic> map = new Dictionary<int, dynamic>
    {
        {1, new {SlNo="1", StudentName="Daniel",StudentClass="4"}},
        {2, new {SlNo="2", StudentName="Maties",StudentClass="4"}}
    };

            foreach (Dictionary<int, string> evl in map)
            {
                yield return MakeEntry(evl, FindTable("ApplicationsStudentDB", MTables));
            }
}

        private QvxDataRow MakeEntry( evl, QvxTable table)
        {
            var row = new QvxDataRow();
            row[table.Fields[0]] = evl.SlNo;
            row[table.Fields[1]] = evl.StudentName;
            row[table.Fields[2]] = evl.StudentClass;
            return row;
        }

我该如何做到这一点?请帮助我。


1
你想要做什么?在这个问题中,你没有概述错误。你告诉我们你在代码中做了什么,然后问如何做“它”,我们需要一个实际的问题来回答! - Alfie Goodacre
@Alfie Goodacre 更新了我的查询。 - daisy
这段代码无法编译。MakeEntry(dynamic evl, ...) 可以帮助你入门,但你会缺少 StudentScore 等内容。仍然不是很清楚。 - H H
在 for 循环中使用 var for(var x in y) 是一个明智的选择。 - Vignesh Murugan
@Henk Holterman 抱歉,现在更新了。 - daisy
1个回答

9

这是因为当您在字典中循环遍历项目时,字典内的项目不是一个字典,而是一个键值对。您在循环中使用了错误类型声明evl。此外,您的字典包含intdynamic类型,但是您将循环声明为一对字符串。您不能只是这样更改类型。应该是:

foreach (KeyValuePair<int, dynamic> evl in map)

3
或者只需 (var evl in ...) - H H
@ADyson 如何将它放入MTables的行中?我遇到了“对象实例未设置为对象实例”的错误。 - daisy
@daisy 这个错误是在哪一行发生的?你是否暂停执行并检查各个变量,看哪个项目为 null / 未设置? - ADyson
@ADyson 谢谢AD,我会再发布一个问题,这样就可以理解了。 - daisy
@ADyson 我需要更多的帮助。在这一行代码 ' yield return MakeEntry(evl, FindTable("ApplicationsStudentDB", MTables)); ' 中,我遇到了错误:'System.Collections.Generic.KeyValuePair<string,object>' 不包含 StudentName 的定义。 - daisy
@daisy 听起来你已经稍微改了一下代码,如果你的KeyValuePair现在是<string, object>。最好是提出一个新问题,与这个问题有关,并发布你最新的代码。如果你在这里链接它,我会看一下。 - ADyson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接