[英]Linq Lookup dynamic list
我有一个对象列表(字符串文件名,BitmapImage图像)用作图像缓存。
private static readonly List<ImageData> imageCache = new List<ImageData>();
我创建了一个Lookup以在每次需要此缓存时检查它的图像。 如果图像不在列表中,则会将其添加到列表中。
Looked是静态创建的
private static Lookup<string, ImageData> FileNameLookup = (Lookup<string, ImageData>)
imageCache.ToLookup(data => data.ImageFileName, data => data);
但是,除非每次将元素添加到列表中时都重新创建FileNameLookup,否则Lookup绝不会返回确实具有相同文件名的对象。
public static void Reinit()
{
FileNameLookup = (Lookup<string, ImageData>) imageCache.ToLookup(data =>
data.ImageFileName, data => data);
}
仅在列表内容为静态的情况下才应使用查找吗? 我可以轻松地使用字典,但想尝试查找。
干杯,
詹姆士
FileNameLookup
静态变量有时会根据imageCache
列表的内容构建。 如果以后将新元素添加到列表中,将不会反映查找。 字典确实是缓存更好的解决方案,如果你不能使用内置的ASP.NET 缓存 。
要么使用字典,其中文件名是键,图像是值
或者,如果您希望保留ImageData对象,则可以创建KeyedCollection的子类,该子类提取filename属性并将其用作键:
class ImageCache : System.Collections.ObjectModel.KeyedCollection<string, ImageData>
{
protected override string GetKeyForItem(ImageData item)
{
return item.ImageFileName;
}
}
像这样使用
ImageCache c = new ImageCache();
string path = @"c:\somepath\image.jpg";
if (c.Contains(path))
{
return c[path];
}
else
{
// put something into the cache
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.