【发布时间】:2015-12-23 21:35:00
【问题描述】:
我在 foreach 循环中进行投射时遇到问题。
我有以下包含基本对象的代码:
public class DBFieldMap
{
public String fieldName { get; set; }
public String fieldValue { get; set; }
public DBFieldMap() { }
public DBFieldMap(String fname, String fvalue)
{
fieldName = fname;
fieldValue = fvalue;
}
}
使用上述对象的字典
public class MappedSQLFields : Dictionary<String, DBFieldMap>
{
public MappedSQLFields()
{
this.Add("firstname", new DBFieldMap());
this.Add("lastname", new DBFieldMap());
this.Add("email", new DBFieldMap());
etc...
}
}
具有基于上述对象的属性的另一个对象
public class Audience : IEnumerable
{
...
public MappedSQLFields audienceSQLMap
{
get;
set;
}
}
我希望能够遍历 AudienceSQLMap 属性并提取 DBFieldMap Dictionary 对象的 fieldName 和 fieldValue 属性的值,但我在“foreach”行收到以下错误。我尝试了各种显式转换,但似乎仍然无法让 CASTing 工作。
foreach (MappedSQLFields item in audience.audienceSQLMap)
{
//Do something with item.fieldName and item.fieldValue
}
错误 49 无法转换类型 'System.Collections.Generic.KeyValuePair' 到 'MappedSQLFields'
任何帮助将不胜感激。谢谢。
传奇继续
好的,现在由于下面每个人的帮助,上述工作正常,现在我在将对象的 JSON 等价物转换回原始对象时遇到问题。我收到了与我最初收到的相同的错误,但尝试了我能想到的各种 CAST 语句,它仍然让我感到悲伤。我显然错过了关于整个主题的一些内容。
这很好用:
var json = new JavaScriptSerializer().Serialize(audienceSQLMap);
这一行出错:
this.audienceSQLMap = (MappedSQLFields)new JavaScriptSerializer().Deserialize(json,typeof(KeyValuePair<String, DBFieldMap>));
【问题讨论】:
-
从您的代码看来,
audience.audienceSQLMap是MappedSQLFields的单个实例,因此您无法对其进行迭代。你能更好地澄清Audience类吗?