我在 foreach 循环中进行 CAST 时遇到问题。
我有以下由基本对象组成的代码:
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”行收到以下错误。我已经尝试了各种显式转换,但似乎仍然无法使 CAST 正常工作。
foreach (MappedSQLFields item in audience.audienceSQLMap)
{
//Do something with item.fieldName and item.fieldValue
}
Error 49 Cannot convert type 'System.Collections.Generic.KeyValuePair' to 'MappedSQLFields'
任何帮助将不胜感激。谢谢。
传奇仍在继续
好的,现在由于下面每个人的帮助,上面的内容可以正常工作,现在我在将对象的 JSON 等效项转换回原始对象时遇到问题。我收到了与最初收到的相同的错误,但尝试了我能想到的各种 CAST 语句,但它仍然让我感到悲伤。我显然遗漏了有关整个主题的一些内容。
这工作正常:
var json = new JavaScriptSerializer().Serialize(audienceSQLMap);
此行错误:
this.audienceSQLMap = (MappedSQLFields)new JavaScriptSerializer().Deserialize(json,typeof(KeyValuePair<String, DBFieldMap>));
最佳答案
它希望您迭代键/值对。
修改您的代码以使用 KeyValuePair<string, DBFieldMap>
:
foreach (KeyValuePair<string, DBFieldMap> item in audience.audienceSQLMap)
或者,更简洁地,只需使用 var
:
foreach (var item in audience.audienceSQLMap)
{
//Do something with item.fieldName and item.fieldValue
var name = item.Value.fieldName;
var value = item.Value.fieldValue;
...
}
如果您需要的只是字典的值,您可以迭代这些值:
foreach (DBFieldMap map in a.audienceSQLMap.Values)
{
var name = map.fieldName;
var value = map.fieldValue;
...
}
关于c# - foreach 循环中的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32792567/