如何快速搜索集合?

时间:2012-02-12 18:43:43

标签: c#

编辑:我改写了这个问题,并在这篇文章中解决了这个问题:How do I search within a collection of type ConfigurationSection?

原始问题:

我在我的网络配置中存储了配置选项列表。我最终可能会有50或100件物品。

我正在使用此处描述的方法:

http://net.tutsplus.com/tutorials/asp-net/how-to-add-custom-configuration-settings-for-your-asp-net-application/

好消息:

它有效,我有一个包含所有

的_Config集合

问题:如何查询特定Feed的_Config? (随着时间的推移,我会有50-100,也许更多......有一天,这将转移到数据库,但现在不会,因为它托管在azure上,我现在需要避免使用azure持久性。)

(因为这会执行很多,也许它应该是哈希表或字典?但我不知道如何创建em ...)

我一直在努力,并且无法将_Config转换为列表或我可以查询的内容。

问题是:如何将_Config(从上面的链接)变成我可以查询特定Feed的内容?

最终目标是让一个func被调用以使用特定的feed,因此它需要来自该feed记录的配置信息。在伪代码中,目标是:

getFeed(feedname)
    if (_Config.name == feedname) // e.g. feedname is one of the "name" elements in the web.config
        // do the stuff
        GetData(_Config.feedname.url)
    else
        // requested feed is not in our config
        // tell use can't do it

或者,(也是伪代码)

getFeed(feedname)
    try
        thisPassFeed = _Config.feedname;
        string url = thisPassFeed.url;
        // do the stuff
        GetData(url);
    catch
        // requested feed is not in our config
        // tell use can't do it
        return("can't find that feedname in web.config")

1 个答案:

答案 0 :(得分:0)

您可以创建一个具有私有Dictionary成员的静态类。在静态构造函数中访问_Config并执行

public static class Feeds
{
    private static readonly Dictionary<string, FeedElement> feeds;

    static Feeds()
    {
        feeds = new Dictionary<string, FeedElement>();
        var config = ConfigurationManager.GetSection("feedRetriever") as FeedRetrieverSection;
        foreach (FeedElement feed in config.Feeds)
        {
            feeds.Add(feed.Name, feed);
        }
    }

    static public FeedElement GetFeed(string name)
    {
        return feeds[name];
    }
}