繁体   English   中英

Linq查找动态列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM