ASP.NET键/值列表

时间:2008-10-19 21:08:36

标签: asp.net c#-3.0

我正在为正在进行重新设计的大型网站进行自定义404页面。客户可能已将大约40个高使用率页面加入书签,我们的新网站结构将破坏这些书签。

在我的自定义404页面上,如果他们尝试通过旧网址导航到其中一个高使用率网页,我想提醒他们注意新网址。所以我在404页面上有几个动态控件,一个用于“你想要这个吗?”对话框的类型,另一个用于“if-so-go-here(并更新您的书签)”类型的对话框。这很容易。

要建议新网址,我正在查看请求的网址。如果它中有关键词,我将基于此建议新的URL,而我们正在解雇你想要的相应的......,如果是的话......关于404的建议如上所述的页面。

所以我想在数据结构中存储这些40-keyh键/值对( keyword / new-URL pair ),我不确定什么是最好的。字典? IDictionary的?有什么区别,哪个更合适?

还是我完全走错了路?

感谢您的时间。

5 个答案:

答案 0 :(得分:4)

我会使用字典< T,T>来自System.Collections.Generic命名空间。

答案 1 :(得分:2)

您可以使用NameValueCollection。

答案 2 :(得分:2)

对于您的用例,这可能有点过分,但我可能允许每个Uri使用多个关键字,以及相对权重分数。然后,动态评分匹配的关键字。

class UriSuggester {
   private List<SuggestedUri> Uris { get; set; }

   Uri[] GetSuggestions(Uri originalUri) {
      var suggestionHits = new Dictionary<SuggestedUri, int>();
      foreach (var keyword in KeyWords.Parse(originalUri)) {
         // find suggestions matching that keyword
         foreach (var suggestedUri in Uris.Where(u => u.Keywords.Contains(keyword)) {
           // add a hit for keyword match
           suggestionHits[suggestedUri] += 1;
         }
      }
      // order by weight * hits
      return suggestionHits.Keys
        .OrderBy(s => s.Weight * suggestionHits[s])
        .Select(s => s.Uri)
        .ToArray();
   }
}

class SuggestedUri {
   public Uri Suggested { get; set; }
   public int Weight { get; set; }
   public Keyword[] Keywords;
}

class Keyword {
   public string Value { get; set; }
   public static Keyword[] Parse(Uri uri);
   override Equals;
   override GetHashCode;
}

答案 3 :(得分:1)

字典会好的。你把它存储为接口类型IDictionary或者字典本身在这种情况下并不重要,因为除了在404页面本身之外它不会被传递太多。

您是否考虑过进行一些网址重写以支持旧网址?

答案 4 :(得分:1)

您可以考虑编写自己的类逻辑,然后将其分配给List数据结构,如下所示:

public class KeyValuesClass
{
    private string a_key;
    private string a_value;

    public KeyValuesClass(string a_key, string a_value)
    {
           this.a_key = a_key;
           this.a_value = a_value;
    }

    public string Key
    {
        get{ return a_key; }
        set { a_key = value; }
    }

    public string Value
    {
        get{ return a_value; }
        set { a_value = value; }
    }

}

代码中的某个地方

List<KeyValuesClass> my_key_value_list = new List<KeyValuesClass>();
my_key_value_list.Add(new KeyValuesClass("key", "value");

但是您可以将Dictionary视为我们的同事程序员在上面提到的:)