Невозможно преобразовать словарь ValueCollection в IEnumerable <T>. Что мне не хватает? - PullRequest
2 голосов
/ 09 марта 2009
var _pool = new Dictionary<Type, Dictionary<EntityIdType, Object>>();

public IEnumerable<EntityType> GetItems<EntityType>()
{
    Type myType = typeof(EntityType);

    if (!_pool.ContainsKey(myType))
        return new EntityType[0];

    //does not work, always returns null
    // return _pool[myType].Values; as IEnumerable<EntityType>;

    //hack: cannot cast Values to IEnumarable directly
    List<EntityType> foundItems = new List<EntityType>();
    foreach (EntityType entity in _pool[myType].Values)
    {
        foundItems.Add(entity);
    }
    return foundItems as IEnumerable<EntityType>;

}

Ответы [ 2 ]

7 голосов
/ 09 марта 2009

Попробуйте это:

return _pool[myType].Values.Cast<EntityType>();

Это приводит к приведению каждого элемента в перечислении.

1 голос
/ 09 марта 2009

_pool определяется как тип Dictionary<Type, Dictionary<EntityIdType, Object>>

Из-за этого, вызов словаря, возвращаемого для типа, возвращает ICollection<Object>, который вы не можете привести непосредственно к IEnumerble<EntityType>.

Скорее, вы должны использовать метод расширения Cast, как указано в другом ответе на этот вопрос:

Невозможно привести словарь ValueCollection в IEnumarable . Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...