我遇到了一些麻烦,并且无法理解为什么我无法从下面的代码中存储的我的集合中获取特定值...
public Dog Get(string name)
{
Dog dog = null;
var context = HttpContext.Current;
if (context.Cache[CacheKey] != null)
{
System.Collections.IDictionaryEnumerator en = context.Cache.GetEnumerator();
while (en.MoveNext())
{
if (en.Key.ToString() == "AnimalStore")
{
// I would like to use a foreach loop to look for a specific dog here but I get an error!
// foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'
foreach (var item in en.Value)
{
// en.Value contains two Dog objects with data but I can't get at them or their properties....
}
}
}
//dog = (Dog)context.Cache[CacheKey];
}
return dog;
}
foreach语句不能对'System.Collections.IDictionaryEnumerator'类型的变量进行操作,因为'System.Collections.IDictionaryEnumerator'不包含'GetEnumerator'的公共定义
其他人可以解释为什么我不能只通过我的数组来获取Dog.name并执行以下操作:// return dogs.Find(p => p.name == name);这对我来说是一个令人困惑的概念,所以我很欣赏理解中的帮助......
答案 0 :(得分:0)
您收到此错误,因为您尝试迭代的对象未实现IEnumerable
接口。
似乎en.Value
在这里是一个对象(我现在没有VS和我一起测试它)。如果是,则需要将其强制转换为适当的类型,如果您的强制类型是集合且未实现IEnumerable
接口,则需要通过AsEnumerable()
调用System.Linq
扩展方法到位。否则,正如我所说,将其转换为适当的类型应该有效。