Comment obtenir la liste des valeurs de dictionnaire générique
J'ai utilisé ce ObjectPool classe comme la base de ma Carte d'Identité. Cependant, j'ai besoin de ramener la liste de tous les objets d'un type. Matthieu a :
public IEnumerable<T> GetItems<T>()
{
Type myType = typeof(T);
if (!m_pool.ContainsKey(myType))
return new T[0];
return m_pool[myType].Values as IEnumerable<T>;
}
Cependant, quand je fais des modifications pour le client comme suit:
pool.AddItem<Animal>(dog.ID, dog);
pool.AddItem<Vegetable>(carrot.Identifier, carrot);
pool.AddItem<Vegetable>(greenbean.Identifier, greenbean);
pool.AddItem<Mineral>(carbon.UniqueID, carbon);
Console.WriteLine("Dog is in the pool -- this statement is " + pool.ContainsKey<Animal>(dog.ID));
IEnumerable<Vegetable> veggies = pool.GetItems<Vegetable>();
foreach(Vegetable veg in veggies)
Console.WriteLine(string.Format("{0} - {1}", veg.Color, veg.IsTasty));
légumes est null. Il semblerait que m_pool[myType].Les valeurs ne prend pas en charge la distribution de IEnumerable.
J'ai essayé quelques petites choses, par exemple:
IDictionary<int, T> dic = (IDictionary<int, T>) m_pool[myType];
ICollection<T> values = (ICollection<T>)dic.Values;
Cependant, je finis toujours avec une erreur de casting.
Ce qui me manque?
Vous devez vous connecter pour publier un commentaire.
Bien, que
GetItems
méthode est jamais d'aller travailler, de voir queDictionary<int, object>.Values
ne pas mettre en œuvreIEnumerable<T>
saufT
estobject
. Dommage que la méthode est donc fondamentalement cassé - oh, pour certains tests unitaires.Je vous suggère de vérifier la licence, et si vous pouvez corriger
GetItems
, le faire:Que si vous êtes en utilisant .NET 3.5 (vous aurez besoin
using System.Linq
ainsi, pour obtenir leCast
méthode d'extension). Laissez-moi savoir si vous avez besoin de quelque chose pour .NET 2.0.new T[0]
surEnumerable.Empty<T>()
? Je vous demande simplement de la curiosité.