早上好,
我有一个Product {}类,它有一个Dictionary:
Dictionary<Type, List<IPropertyItem>> extensions;
我使用此方法保存数据:
public void SaveItem<T>(T item)
{
Type currentType = typeof(T);
if (!extensions.ContainsKey(currentType))
{
extensions.Add(currentType, new List<IPropertyItem>());
}
if (currentType == typeof(Discount))
{
Discount newDiscount = (Discount)Convert.ChangeType(item, typeof(Discount));
extensions[currentType].Add(newDiscount);
}
else if(currentType == typeof(Tax))
{
Tax newTax = (Tax)Convert.ChangeType(item, typeof(Tax));
extensions[currentType].Add(newTax);
}
else if(currentType == typeof(Size))
{
Size newSize = (Size)Convert.ChangeType(item, typeof(Size));
extensions[currentType].Add(newSize);
}
}
现在我想得到一个存储在我的词典中的某个值类型的列表,我的意思是我希望该方法返回一个像这个函数的List:
public List<T> GetExtensionsDictionary<T>()
{
Type currentType = typeof(T);
List<T> returnedList = new List<T>();
if (!extensions.ContainsKey(currentType))
{
return null;
}
return extensions[T];
}
上面调用的方法是:
List<Discount> myDiscounts = myProduct.GetExtensionsDictionary<Discount>();
thnks,
任何帮助将不胜感激......
答案 0 :(得分:3)
我相信这就是你想要的:
public List<T> GetExtensionsDictionary<T>()
{
Type currentType = typeof(T);
List<T> returnedList = new List<T>();
if (!extensions.ContainsKey(currentType))
{
return null;
}
return extensions[currentType].Cast<T>().ToList();
}
您必须使用extensions
而不是currentType
将T
编入索引,因为T
是一个通用参数,您需要使用typeof
获得的运行时类型
您可以使用linq方法Cast
和ToList
将字典中currentType
的集合转换为List<T>
。这是列表的副本,因此请注意性能方面的考虑。
确保您是using System.Linq;